From 59db18c7d8ea0fdce8ff25eef5a13e59e1af4c58 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 17 Jul 2026 10:38:43 +0100 Subject: Generate separate functions for primitive encode/decode --- .../output/rust/src/gen/data/transient_0.rs | 94 ++++++---------------- .../output/rust/src/gen/transient_0.rs | 38 +++++++++ examples/10-transient-0/output/rust/src/lib.rs | 1 + .../10-transient-0/output/rust/src/transient_0.rs | 1 + 4 files changed, 66 insertions(+), 68 deletions(-) create mode 100644 examples/10-transient-0/output/rust/src/gen/transient_0.rs create mode 100644 examples/10-transient-0/output/rust/src/transient_0.rs (limited to 'examples/10-transient-0') diff --git a/examples/10-transient-0/output/rust/src/gen/data/transient_0.rs b/examples/10-transient-0/output/rust/src/gen/data/transient_0.rs index e899c4c..2945bdc 100644 --- a/examples/10-transient-0/output/rust/src/gen/data/transient_0.rs +++ b/examples/10-transient-0/output/rust/src/gen/data/transient_0.rs @@ -1,103 +1,68 @@ // Generated by hobgoblin. pub fn encode_struct_with_bool(value: &crate::data::StructWithBool, writer: &mut impl std::io::Write) { - todo!(); - todo!(); + crate::transient_0::encode_bool(&value.a, writer); + crate::transient_0::encode_bool(&value.b, writer); } pub fn decode_struct_with_bool(reader: &mut impl std::io::Read) -> crate::data::StructWithBool { - let a = todo!(); - let b = todo!(); + let a = crate::transient_0::decode_bool(reader); + let b = crate::transient_0::decode_bool(reader); crate::data::StructWithBool { a: a, b: b } } pub fn encode_struct_with_int_32(value: &crate::data::StructWithInt32, writer: &mut impl std::io::Write) { - writer.write_all(&value.a.to_le_bytes()); - writer.write_all(&value.b.to_le_bytes()); + crate::transient_0::encode_int_32(&value.a, writer); + crate::transient_0::encode_int_32(&value.b, writer); } pub fn decode_struct_with_int_32(reader: &mut impl std::io::Read) -> crate::data::StructWithInt32 { - let a = { - let bytes = { - let mut bytes = [0; 4]; - reader.read_exact(&mut bytes); - bytes - }; - i32::from_le_bytes(bytes) - }; - let b = { - let bytes = { - let mut bytes = [0; 4]; - reader.read_exact(&mut bytes); - bytes - }; - i32::from_le_bytes(bytes) - }; + let a = crate::transient_0::decode_int_32(reader); + let b = crate::transient_0::decode_int_32(reader); crate::data::StructWithInt32 { a: a, b: b } } pub fn encode_struct_with_int_64(value: &crate::data::StructWithInt64, writer: &mut impl std::io::Write) { - todo!(); - todo!(); + crate::transient_0::encode_int_64(&value.a, writer); + crate::transient_0::encode_int_64(&value.b, writer); } pub fn decode_struct_with_int_64(reader: &mut impl std::io::Read) -> crate::data::StructWithInt64 { - let a = todo!(); - let b = todo!(); + let a = crate::transient_0::decode_int_64(reader); + let b = crate::transient_0::decode_int_64(reader); crate::data::StructWithInt64 { a: a, b: b } } pub fn encode_struct_with_string(value: &crate::data::StructWithString, writer: &mut impl std::io::Write) { - todo!(); - todo!(); + crate::transient_0::encode_string(&value.a, writer); + crate::transient_0::encode_string(&value.b, writer); } pub fn decode_struct_with_string(reader: &mut impl std::io::Read) -> crate::data::StructWithString { - let a = todo!(); - let b = todo!(); + let a = crate::transient_0::decode_string(reader); + let b = crate::transient_0::decode_string(reader); crate::data::StructWithString { a: a, b: b } } pub fn encode_outer_struct(value: &crate::data::OuterStruct, writer: &mut impl std::io::Write) { todo!(); - writer.write_all(&value.c.to_le_bytes()); + crate::transient_0::encode_int_32(&value.c, writer); } pub fn decode_outer_struct(reader: &mut impl std::io::Read) -> crate::data::OuterStruct { let inner = todo!(); - let c = { - let bytes = { - let mut bytes = [0; 4]; - reader.read_exact(&mut bytes); - bytes - }; - i32::from_le_bytes(bytes) - }; + let c = crate::transient_0::decode_int_32(reader); crate::data::OuterStruct { inner: inner, c: c } } pub fn encode_inner_struct(value: &crate::data::InnerStruct, writer: &mut impl std::io::Write) { - writer.write_all(&value.a.to_le_bytes()); - writer.write_all(&value.b.to_le_bytes()); + crate::transient_0::encode_int_32(&value.a, writer); + crate::transient_0::encode_int_32(&value.b, writer); } pub fn decode_inner_struct(reader: &mut impl std::io::Read) -> crate::data::InnerStruct { - let a = { - let bytes = { - let mut bytes = [0; 4]; - reader.read_exact(&mut bytes); - bytes - }; - i32::from_le_bytes(bytes) - }; - let b = { - let bytes = { - let mut bytes = [0; 4]; - reader.read_exact(&mut bytes); - bytes - }; - i32::from_le_bytes(bytes) - }; + let a = crate::transient_0::decode_int_32(reader); + let b = crate::transient_0::decode_int_32(reader); crate::data::InnerStruct { a: a, b: b } } @@ -124,26 +89,19 @@ pub fn decode_struct_with_option(reader: &mut impl std::io::Read) -> crate::data } pub fn encode_variant_one(value: &crate::data::VariantOne, writer: &mut impl std::io::Write) { - writer.write_all(&value.a.to_le_bytes()); + crate::transient_0::encode_int_32(&value.a, writer); } pub fn decode_variant_one(reader: &mut impl std::io::Read) -> crate::data::VariantOne { - let a = { - let bytes = { - let mut bytes = [0; 4]; - reader.read_exact(&mut bytes); - bytes - }; - i32::from_le_bytes(bytes) - }; + let a = crate::transient_0::decode_int_32(reader); crate::data::VariantOne { a: a } } pub fn encode_variant_two(value: &crate::data::VariantTwo, writer: &mut impl std::io::Write) { - todo!(); + crate::transient_0::encode_int_64(&value.a, writer); } pub fn decode_variant_two(reader: &mut impl std::io::Read) -> crate::data::VariantTwo { - let a = todo!(); + let a = crate::transient_0::decode_int_64(reader); crate::data::VariantTwo { a: a } } diff --git a/examples/10-transient-0/output/rust/src/gen/transient_0.rs b/examples/10-transient-0/output/rust/src/gen/transient_0.rs new file mode 100644 index 0000000..18a605c --- /dev/null +++ b/examples/10-transient-0/output/rust/src/gen/transient_0.rs @@ -0,0 +1,38 @@ +// Generated by hobgoblin. + +pub fn encode_bool(value: &::core::primitive::bool, writer: &mut impl std::io::Write) { + todo!(); +} + +pub fn decode_bool(reader: &mut impl std::io::Read) -> ::core::primitive::bool { + todo!() +} + +pub fn encode_int_32(value: &::core::primitive::i32, writer: &mut impl std::io::Write) { + writer.write_all(&value.to_le_bytes()); +} + +pub fn decode_int_32(reader: &mut impl std::io::Read) -> ::core::primitive::i32 { + let bytes = { + let mut bytes = [0; 4]; + reader.read_exact(&mut bytes); + bytes + }; + i32::from_le_bytes(bytes) +} + +pub fn encode_int_64(value: &::core::primitive::i64, writer: &mut impl std::io::Write) { + todo!(); +} + +pub fn decode_int_64(reader: &mut impl std::io::Read) -> ::core::primitive::i64 { + todo!() +} + +pub fn encode_string(value: &::std::string::String, writer: &mut impl std::io::Write) { + todo!(); +} + +pub fn decode_string(reader: &mut impl std::io::Read) -> ::std::string::String { + todo!() +} diff --git a/examples/10-transient-0/output/rust/src/lib.rs b/examples/10-transient-0/output/rust/src/lib.rs index 865555e..56be8ca 100644 --- a/examples/10-transient-0/output/rust/src/lib.rs +++ b/examples/10-transient-0/output/rust/src/lib.rs @@ -1,4 +1,5 @@ pub mod data; +pub mod transient_0; #[cfg(test)] mod test { diff --git a/examples/10-transient-0/output/rust/src/transient_0.rs b/examples/10-transient-0/output/rust/src/transient_0.rs new file mode 100644 index 0000000..8b2b800 --- /dev/null +++ b/examples/10-transient-0/output/rust/src/transient_0.rs @@ -0,0 +1 @@ +include!("./gen/transient_0.rs"); -- cgit v1.2.3