Add InfoCommand as one fully-wired real example in bambulab.v1
The rest of proto/bambulab/ was pure boilerplate/comments with nothing concrete to copy from. This one message (sequence_id + command, matching Bambu's real get_version request) is wired all the way through: real proto, real generated Rust struct, lib.rs actually include!'d instead of commented out. continuum-proxy's bambu_protocol_demo example serializes it and diffs the output against Bambu's actual wire JSON byte for byte. Verified with cargo build (this crate) and cargo run --example bambu_protocol_demo (continuum-proxy) - output matches exactly.
This commit is contained in:
@@ -8,17 +8,20 @@ pub use continuum::v1::{
|
|||||||
MaterialProfile, PrintJob, PrintJobStatus, PrintParameters, Template,
|
MaterialProfile, PrintJob, PrintJobStatus, PrintParameters, Template,
|
||||||
};
|
};
|
||||||
|
|
||||||
// bambulab/*.proto currently have no messages (see proto/bambulab/), so
|
pub mod bambulab {
|
||||||
// there's nothing for prost to emit yet — `include!` against a
|
// common.proto and bambulab/v2/*.proto have no messages yet, so
|
||||||
// nonexistent file would break the build. Once you've added real messages
|
// there's nothing for prost to emit for them — `include!` against a
|
||||||
// to proto/bambulab/{common,v1/*,v2/*}.proto, add:
|
// nonexistent file breaks the build. Uncomment each once it has real
|
||||||
|
// content:
|
||||||
//
|
//
|
||||||
// pub mod bambulab {
|
|
||||||
// include!(concat!(env!("OUT_DIR"), "/bambulab.rs")); // common.proto's messages
|
// include!(concat!(env!("OUT_DIR"), "/bambulab.rs")); // common.proto's messages
|
||||||
// pub mod v1 {
|
pub mod v1 {
|
||||||
// include!(concat!(env!("OUT_DIR"), "/bambulab.v1.rs")); // request.proto + report.proto combined — same package
|
// request.proto + report.proto both declare `package bambulab.v1;`,
|
||||||
// }
|
// so prost combines them into one output file, regardless of which
|
||||||
|
// input file each message came from.
|
||||||
|
include!(concat!(env!("OUT_DIR"), "/bambulab.v1.rs"));
|
||||||
|
}
|
||||||
// pub mod v2 {
|
// pub mod v2 {
|
||||||
// include!(concat!(env!("OUT_DIR"), "/bambulab.v2.rs"));
|
// include!(concat!(env!("OUT_DIR"), "/bambulab.v2.rs"));
|
||||||
// }
|
// }
|
||||||
// }
|
}
|
||||||
|
|||||||
@@ -2,12 +2,22 @@ syntax = "proto3";
|
|||||||
|
|
||||||
package bambulab.v1;
|
package bambulab.v1;
|
||||||
|
|
||||||
// import "bambulab/common.proto"; once common.proto has a shared message
|
// One real, fully-wired example — copy this shape for every other command
|
||||||
// worth embedding (composition, not inheritance — see that file).
|
// (pushing/pushall, print control, etc.). sequence_id is `string`, not
|
||||||
|
// int64: Bambu sends it as a JSON string ("0"), and this crosses the wire
|
||||||
|
// as JSON over MQTT, not binary protobuf — the Rust type needs to match
|
||||||
|
// what serde_json actually produces, not what "feels more correct" for a
|
||||||
|
// counter.
|
||||||
|
message InfoCommand {
|
||||||
|
string sequence_id = 1;
|
||||||
|
string command = 2;
|
||||||
|
}
|
||||||
|
|
||||||
// Your command messages go here, e.g.:
|
// Add your next message here, e.g.:
|
||||||
//
|
//
|
||||||
// message InfoCommand {
|
// message PushingCommand {
|
||||||
// string sequence_id = 1;
|
// string sequence_id = 1;
|
||||||
// string command = 2;
|
// string command = 2;
|
||||||
|
// int32 version = 3;
|
||||||
|
// int32 push_target = 4;
|
||||||
// }
|
// }
|
||||||
|
|||||||
Reference in New Issue
Block a user