diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json
index 686a0a1..24636e7 100644
--- a/.cargo_vcs_info.json
+++ b/.cargo_vcs_info.json
@@ -1,6 +1,6 @@
 {
   "git": {
-    "sha1": "c2c504a038cfe412ad8a3f8c0a1b747126eeedda"
+    "sha1": "6b05a0616ef2a982068e0d5fbe28d2058d49d8e0"
   },
   "path_in_vcs": ""
 }
\ No newline at end of file
diff --git a/Android.bp b/Android.bp
index f8f8ee2..60940fe 100644
--- a/Android.bp
+++ b/Android.bp
@@ -7,7 +7,7 @@
     name: "generate_canonical_tests",
     crate_name: "generate_canonical_tests",
     cargo_env_compat: true,
-    cargo_pkg_version: "0.1.2",
+    cargo_pkg_version: "0.1.3",
     srcs: ["src/bin/generate-canonical-tests.rs"],
     edition: "2021",
     features: [
@@ -37,7 +37,7 @@
     name: "libpdl_compiler",
     crate_name: "pdl_compiler",
     cargo_env_compat: true,
-    cargo_pkg_version: "0.1.2",
+    cargo_pkg_version: "0.1.3",
     srcs: ["src/lib.rs"],
     edition: "2021",
     features: [
@@ -66,7 +66,7 @@
     name: "pdlc",
     crate_name: "pdlc",
     cargo_env_compat: true,
-    cargo_pkg_version: "0.1.2",
+    cargo_pkg_version: "0.1.3",
     srcs: ["src/main.rs"],
     edition: "2021",
     features: [
diff --git a/Cargo.toml b/Cargo.toml
index 6bbb7d4..57d75db 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -12,13 +12,16 @@
 [package]
 edition = "2021"
 name = "pdl-compiler"
-version = "0.1.2"
+version = "0.1.3"
 authors = [
     "Henri Chataing <henrichataing@google.com>",
     "David de Jesus Duarte <licorne@google.com>",
     "Martin Geisler <mgeisler@google.com>",
 ]
-exclude = [".github/*"]
+exclude = [
+    ".github/*",
+    "editors/*",
+]
 default-run = "pdlc"
 description = "Parser and serializer generator for protocol binary packets"
 readme = "README.md"
diff --git a/Cargo.toml.orig b/Cargo.toml.orig
index 878053d..c9fa183 100644
--- a/Cargo.toml.orig
+++ b/Cargo.toml.orig
@@ -1,6 +1,6 @@
 [package]
 name = "pdl-compiler"
-version = "0.1.2"
+version = "0.1.3"
 edition = "2021"
 description = "Parser and serializer generator for protocol binary packets"
 repository = "https://github.com/google/pdl/"
@@ -12,7 +12,7 @@
     "David de Jesus Duarte <licorne@google.com>",
     "Martin Geisler <mgeisler@google.com>"
 ]
-exclude = [".github/*"]
+exclude = [".github/*", "editors/*"]
 categories = ["parsing"]
 default-run = "pdlc"
 
diff --git a/METADATA b/METADATA
index 5d18826..b35258e 100644
--- a/METADATA
+++ b/METADATA
@@ -11,13 +11,13 @@
   }
   url {
     type: ARCHIVE
-    value: "https://static.crates.io/crates/pdl-compiler/pdl-compiler-0.1.2.crate"
+    value: "https://static.crates.io/crates/pdl-compiler/pdl-compiler-0.1.3.crate"
   }
-  version: "0.1.2"
+  version: "0.1.3"
   license_type: NOTICE
   last_upgrade_date {
     year: 2023
     month: 6
-    day: 20
+    day: 27
   }
 }
diff --git a/scripts/Android.bp b/scripts/Android.bp
index a11b007..bb0932c 100644
--- a/scripts/Android.bp
+++ b/scripts/Android.bp
@@ -34,3 +34,10 @@
     ],
 }
 
+// C++ packet runtime.
+cc_library_headers {
+    name: "pdl_cxx_packet_runtime",
+    export_include_dirs: ["."],
+    host_supported: true,
+    vendor_available: true,
+}
diff --git a/scripts/generate_cxx_backend.py b/scripts/generate_cxx_backend.py
index 0c8b9e3..13ea23d 100755
--- a/scripts/generate_cxx_backend.py
+++ b/scripts/generate_cxx_backend.py
@@ -1003,7 +1003,7 @@
             accessors.append(
                 dedent("""\
                 std::vector<uint8_t> GetPayload() const {
-                    ASSERT(valid_);
+                    _ASSERT_VALID(valid_);
                     return payload_.bytes();
                 }
 
@@ -1015,7 +1015,7 @@
             accessors.append(
                 dedent("""\
                 {array_type} Get{accessor_name}() const {{
-                    ASSERT(valid_);
+                    _ASSERT_VALID(valid_);
                     {accessor}
                 }}
 
@@ -1028,7 +1028,7 @@
             accessors.append(
                 dedent("""\
                 {field_type} Get{accessor_name}() const {{
-                    ASSERT(valid_);
+                    _ASSERT_VALID(valid_);
                     return {member_name}_;
                 }}
 
@@ -1039,7 +1039,7 @@
             accessors.append(
                 dedent("""\
                 {field_type}{field_qualifier} Get{accessor_name}() const {{
-                    ASSERT(valid_);
+                    _ASSERT_VALID(valid_);
                     return {member_name}_;
                 }}
 
@@ -1542,10 +1542,14 @@
         {include_header}
         {using_namespace}
 
-        #ifndef ASSERT
+        #ifndef _ASSERT_VALID
+        #ifdef ASSERT
+        #define _ASSERT_VALID ASSERT
+        #else
         #include <cassert>
-        #define ASSERT assert
-        #endif  // !ASSERT
+        #define _ASSERT_VALID assert
+        #endif  // ASSERT
+        #endif  // !_ASSERT_VALID
 
         {open_namespace}
         """).format(input_name=input.name,
diff --git a/scripts/generate_cxx_backend_tests.py b/scripts/generate_cxx_backend_tests.py
index 123b08c..880988e 100755
--- a/scripts/generate_cxx_backend_tests.py
+++ b/scripts/generate_cxx_backend_tests.py
@@ -269,7 +269,7 @@
                 }};
                 {intermediate_declarations}
                 {child_packet_id}Builder packet = {built_packet};
-                ASSERT_EQ(packet.pdl::packet::Builder::Serialize(), expected_output);
+                ASSERT_EQ(packet.SerializeToBytes(), expected_output);
             }}
             """).format(serializer_test_suite=serializer_test_suite,
                         packet_id=packet.id,
diff --git a/scripts/generate_python_backend.py b/scripts/generate_python_backend.py
index 3a1a82b..475154d 100755
--- a/scripts/generate_python_backend.py
+++ b/scripts/generate_python_backend.py
@@ -908,7 +908,11 @@
     enum_name = decl.id
     tag_decls = []
     for t in decl.tags:
-        tag_decls.append(f"{t.id} = {hex(t.value)}")
+        if t.value is not None:
+            tag_decls.append(f"{t.id} = {hex(t.value)}")
+        if t.range is not None:
+            tag_decls.append(f"{t.id}_START = {hex(t.range[0])}")
+            tag_decls.append(f"{t.id}_END = {hex(t.range[1])}")
 
     return dedent("""\
 
diff --git a/scripts/packet_runtime.h b/scripts/packet_runtime.h
index 4a76383..555d092 100644
--- a/scripts/packet_runtime.h
+++ b/scripts/packet_runtime.h
@@ -150,7 +150,7 @@
   }
 
   /// Helper method to serialize the packet to a byte vector.
-  virtual std::vector<uint8_t> Serialize() const {
+  virtual std::vector<uint8_t> SerializeToBytes() const {
     std::vector<uint8_t> output;
     Serialize(output);
     return output;
diff --git a/scripts/pdl/ast.py b/scripts/pdl/ast.py
index 4f884e5..b07f6ad 100644
--- a/scripts/pdl/ast.py
+++ b/scripts/pdl/ast.py
@@ -268,7 +268,7 @@
         return [convert_(elt) for elt in obj]
     if isinstance(obj, object):
         if 'start' in obj.keys() and 'end' in obj.keys():
-            return (objs.start, obj.end)
+            return (obj['start'], obj['end'])
         kind = obj['kind']
         loc = obj['loc']
         loc = SourceRange(loc['file'], SourceLocation(**loc['start']), SourceLocation(**loc['end']))
diff --git a/src/backends/rust.rs b/src/backends/rust.rs
index cda1a8f..f369179 100644
--- a/src/backends/rust.rs
+++ b/src/backends/rust.rs
@@ -483,9 +483,9 @@
         }
 
         quote! {
-            let #parent_id_lower = Arc::new(#parent_data {
+            let #parent_id_lower = #parent_data {
                 #(#field: #value,)*
-            });
+            };
         }
     });
 
@@ -510,7 +510,7 @@
             #[derive(Debug, Clone, PartialEq, Eq)]
             #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
             pub enum #id_data_child {
-                #(#child(Arc<#child_data>),)*
+                #(#child(#child_data),)*
                 Payload(Bytes),
                 None,
             }
@@ -588,7 +588,7 @@
         pub struct #id_packet {
             #(
                 #[cfg_attr(feature = "serde", serde(flatten))]
-                #parent_lower_ids: Arc<#parent_data>,
+                #parent_lower_ids: #parent_data,
             )*
         }
 
@@ -637,12 +637,12 @@
 
             fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
                 let data = #top_level_data::parse_inner(&mut bytes)?;
-                Self::new(Arc::new(data))
+                Self::new(data)
             }
 
             #specialize
 
-            fn new(#top_level_id_lower: Arc<#top_level_data>) -> Result<Self> {
+            fn new(#top_level_id_lower: #top_level_data) -> Result<Self> {
                 #(
                     let #parent_shifted_lower_ids = match &#parent_lower_ids.child {
                         #parent_data_child::#parent_shifted_ids(value) => value.clone(),
@@ -656,7 +656,7 @@
             }
 
             #(pub fn #all_field_getter_names(&self) -> #all_field_borrows #all_field_types {
-                #all_field_borrows #all_field_self_field.as_ref().#all_field_names
+                #all_field_borrows #all_field_self_field.#all_field_names
             })*
 
             #get_payload
diff --git a/src/backends/rust/parser.rs b/src/backends/rust/parser.rs
index 33dd840..203a19b 100644
--- a/src/backends/rust/parser.rs
+++ b/src/backends/rust/parser.rs
@@ -702,7 +702,7 @@
                     let mut cell = Cell::new(payload);
                     let child_data = #child_ids_data::parse_inner(&mut cell #child_parse_args)?;
                     // TODO(mgeisler): communicate back to user if !cell.get().is_empty()?
-                    #packet_data_child::#child_ids(Arc::new(child_data))
+                    #packet_data_child::#child_ids(child_data)
                 }),*
                 _ if !payload.is_empty() => {
                     #packet_data_child::Payload(Bytes::copy_from_slice(payload))
diff --git a/src/backends/rust/preamble.rs b/src/backends/rust/preamble.rs
index 45978f1..ce8b742 100644
--- a/src/backends/rust/preamble.rs
+++ b/src/backends/rust/preamble.rs
@@ -55,7 +55,6 @@
         use std::convert::{TryFrom, TryInto};
         use std::cell::Cell;
         use std::fmt;
-        use std::sync::Arc;
         use thiserror::Error;
 
         type Result<T> = std::result::Result<T, Error>;
diff --git a/tests/examples/array-field.pdl b/tests/examples/array-field.pdl
deleted file mode 100644
index 070a6cc..0000000
--- a/tests/examples/array-field.pdl
+++ /dev/null
@@ -1,39 +0,0 @@
-little_endian_packets
-
-custom_field custom: 1 "custom"
-checksum checksum: 1 "checksum"
-
-enum Enum : 1 {
-    tag = 0,
-}
-
-struct Struct {
-    a: 1,
-}
-
-packet Packet {
-    a: 1,
-}
-
-group Group {
-    a: 1,
-}
-
-packet InvalidKind {
-    array_0: Group[],
-    array_1: Packet[],
-    array_2: checksum[],
-}
-
-packet UndeclaredType {
-    array: Unknown[],
-}
-
-packet Correct {
-    array_0: custom[],
-    array_1: Enum[],
-    array_2: Struct[],
-    array_3: 1[],
-    array_4: 1[42],
-    array_5: 1[+2],
-}
diff --git a/tests/examples/checksum-field.pdl b/tests/examples/checksum-field.pdl
deleted file mode 100644
index 0e1a98b..0000000
--- a/tests/examples/checksum-field.pdl
+++ /dev/null
@@ -1,22 +0,0 @@
-little_endian_packets
-
-checksum crc16: 16 "crc16"
-
-packet Undefined {
-    _checksum_start_ (crc16),
-}
-
-packet InvalidType {
-    crc16: 16,
-    _checksum_start_ (crc16),
-}
-
-packet InvalidOrder {
-    _checksum_start_ (crc16),
-    crc16: crc16,
-}
-
-packet Correct {
-    crc16: crc16,
-    _checksum_start_ (crc16),
-}
diff --git a/tests/examples/count-field.pdl b/tests/examples/count-field.pdl
deleted file mode 100644
index a88cccd..0000000
--- a/tests/examples/count-field.pdl
+++ /dev/null
@@ -1,25 +0,0 @@
-little_endian_packets
-
-packet Undefined {
-    _count_ (array): 8,
-}
-
-packet InvalidType {
-    _count_ (array): 8,
-    array: 16,
-}
-
-packet InvalidOrder {
-    array: 16[],
-    _count_ (array): 8,
-}
-
-packet InvalidSize {
-    _count_ (array): 8,
-    array: 16[32],
-}
-
-packet Correct {
-    _count_ (array): 8,
-    array: 16[],
-}
diff --git a/tests/examples/decl-scope.pdl b/tests/examples/decl-scope.pdl
deleted file mode 100644
index c1391ab..0000000
--- a/tests/examples/decl-scope.pdl
+++ /dev/null
@@ -1,26 +0,0 @@
-
-// Clashes with custom_field, struct, enum
-checksum decl_name: 16 "crc16"
-
-// Clashes with checksum, struct, enum
-custom_field decl_name: 1 "custom"
-
-// Clashes with checksum, custom_field, struct
-enum decl_name : 1 {
-    A = 1,
-}
-
-// Clashes with checksum, custom_field, enum
-struct decl_name {
-    a: 1,
-}
-
-// OK
-group decl_name {
-    a: 1,
-}
-
-// OK
-packet decl_name {
-    a: 1,
-}
diff --git a/tests/examples/example.pdl b/tests/examples/example.pdl
deleted file mode 100644
index b34d140..0000000
--- a/tests/examples/example.pdl
+++ /dev/null
@@ -1,78 +0,0 @@
-// line comment
-/* block comment */
-
-little_endian_packets
-
-/* stuff */
-enum FourBits : 4 {
-  ONE = 1,
-  TWO = 2,
-  THREE = 3,
-  FIVE = 5,
-  TEN = 10,
-  LAZY_ME = 15,
-}
-
-/* other stuff */
-enum FourBits : 4 {
-  ONE = 1,
-  TWO = 2,
-  THREE = 3,
-  FIVE = 5,
-  TEN = 10,
-  LAZY_ME = 15
-}
-
-packet Test {
-    /* Checksum */
-    _checksum_start_ (crc16),
-    /* Padding */
-    _padding_ [1],
-    /* Size */
-    _size_ (_payload_) : 1,
-    _size_ (_body_) : 1,
-    _size_ (id) : 1,
-    /* Body */
-    _body_,
-    /* Payload */
-    _payload_,
-    _payload_ : [+1],
-    /* Fixed */
-    _fixed_ = 1:1,
-    _fixed_ = id:id,
-    /* Reserved */
-    _reserved_ : 1,
-    /* Array */
-    id: 1[+1],
-    id: id[+1],
-    id: 1[1],
-    id: id[1],
-    id: 1[],
-    id: id[],
-    /* Scalar */
-    id: 1,
-    /* Typedef */
-    id : id,
-    /* Group */
-    id { a=1, b=2 },
-    id,
-}
-
-packet TestChild : Test {
-}
-
-packet TestChild (a=1, b=2) {
-}
-
-packet TestChild : Test (a=1, b=2) {
-}
-
-checksum id: 1 "id"
-
-custom_field id : 1 "id"
-custom_field id "id"
-
-test Test {
-    "1111",
-    "2222",
-}
diff --git a/tests/examples/fixed-field.pdl b/tests/examples/fixed-field.pdl
deleted file mode 100644
index e69fc7e..0000000
--- a/tests/examples/fixed-field.pdl
+++ /dev/null
@@ -1,22 +0,0 @@
-little_endian_packets
-
-enum Enum : 1 {
-    tag = 0,
-}
-
-packet InvalidValue {
-    _fixed_ = 1: 256,
-}
-
-packet UndeclaredEnum {
-    _fixed_ = tag : InvalidEnum,
-}
-
-packet UndeclaredTag {
-    _fixed_ = invalid_tag : Enum,
-}
-
-packet Correct {
-    _fixed_ = 1: 256,
-    _fixed_ = tag: Enum,
-}
diff --git a/tests/examples/group-constraint.pdl b/tests/examples/group-constraint.pdl
deleted file mode 100644
index 34ee2ab..0000000
--- a/tests/examples/group-constraint.pdl
+++ /dev/null
@@ -1,39 +0,0 @@
-little_endian_packets
-
-custom_field custom_field: 1 "custom"
-checksum checksum: 1 "checksum"
-
-enum Enum : 1 {
-    tag = 0,
-}
-
-group Group {
-    a: 4,
-    b: Enum,
-    c: custom_field,
-    d: checksum,
-}
-
-struct Undeclared {
-    Group { e=1 },
-}
-
-struct Redeclared {
-    Group { a=1, a=2 },
-}
-
-struct TypeMismatch {
-    Group { a=tag, b=1, c=1, d=1 },
-}
-
-struct InvalidLiteral {
-    Group { a=42 },
-}
-
-struct UndeclaredTag {
-    Group { b=undeclared_tag },
-}
-
-struct Correct {
-    Group { a=1, b=tag },
-}
diff --git a/tests/examples/packet.pdl b/tests/examples/packet.pdl
deleted file mode 100644
index 9b9ca20..0000000
--- a/tests/examples/packet.pdl
+++ /dev/null
@@ -1,52 +0,0 @@
-little_endian_packets
-
-custom_field custom: 1 "custom"
-checksum checksum: 1 "checksum"
-
-enum Enum : 1 {
-    tag = 0,
-}
-
-packet Packet {
-    a: 4,
-    b: Enum,
-    c: custom,
-    d: checksum,
-}
-
-struct Struct {
-    a: 4,
-}
-
-packet RecursivePacket_0 : RecursivePacket_1 {
-}
-
-packet RecursivePacket_1 : RecursivePacket_0 {
-}
-
-packet InvalidParent : Struct {
-}
-
-packet UndeclaredParent : FooBar {
-}
-
-packet UnnecessaryConstraints (a=1) {
-}
-
-packet Undeclared : Packet (c=1) {
-}
-
-packet Redeclared : Packet (a=1, a=2) {
-}
-
-packet TypeMismatch : Packet (a=tag, b=1, c=1, d=1) {
-}
-
-packet InvalidLiteral : Packet (a=42) {
-}
-
-packet UndeclaredTag : Packet (b=undeclared_tag) {
-}
-
-packet Correct : Packet (a=1, b=tag) {
-}
diff --git a/tests/examples/recurse.pdl b/tests/examples/recurse.pdl
deleted file mode 100644
index ad3a200..0000000
--- a/tests/examples/recurse.pdl
+++ /dev/null
@@ -1,38 +0,0 @@
-
-struct Struct_0: Struct_1 {
-}
-
-struct Struct_1: Struct_0 {
-}
-
-
-struct Packet_0: Packet_1 {
-}
-
-struct Packet_1: Packet_0 {
-}
-
-
-group Group_0 {
-    Group_1
-}
-
-struct Struct_2 {
-    Group_0
-}
-
-group Group_1 {
-    a: Struct_2
-}
-
-
-struct Struct_3: Struct_4 {
-}
-
-struct Struct_4 {
-    Group_2
-}
-
-group Group_2 {
-    a: Struct_3
-}
diff --git a/tests/examples/size-field.pdl b/tests/examples/size-field.pdl
deleted file mode 100644
index dfa9ad7..0000000
--- a/tests/examples/size-field.pdl
+++ /dev/null
@@ -1,58 +0,0 @@
-little_endian_packets
-
-packet Undefined {
-    _size_ (array): 8,
-}
-
-packet UndefinedPayloadWithBody {
-    _size_ (_payload_): 8,
-    _body_,
-}
-
-packet UndefinedPayload {
-    _size_ (_payload_): 8,
-}
-
-packet UndefinedBodyWithPayload {
-    _size_ (_body_): 8,
-    _payload_,
-}
-
-packet UndefinedBody {
-    _size_ (_body_): 8,
-}
-
-packet InvalidType {
-    _size_ (array): 8,
-    array: 16,
-}
-
-packet InvalidArrayOrder {
-    array: 16[],
-    _size_ (array): 8,
-}
-
-packet InvalidPayloadOrder {
-    _payload_,
-    _size_ (_payload_): 8,
-}
-
-packet InvalidBodyOrder {
-    _body_,
-    _size_ (_body_): 8,
-}
-
-packet CorrectArray {
-    _size_ (array): 8,
-    array: 16[],
-}
-
-packet CorrectPayload {
-    _size_ (_payload_): 8,
-    _payload_,
-}
-
-packet CorrectBody {
-    _size_ (_body_): 8,
-    _body_,
-}
diff --git a/tests/examples/struct.pdl b/tests/examples/struct.pdl
deleted file mode 100644
index d8ed439..0000000
--- a/tests/examples/struct.pdl
+++ /dev/null
@@ -1,52 +0,0 @@
-little_endian_packets
-
-custom_field custom: 1 "custom"
-checksum checksum: 1 "checksum"
-
-enum Enum : 1 {
-    tag = 0,
-}
-
-struct Struct {
-    a: 4,
-    b: Enum,
-    c: custom,
-    d: checksum,
-}
-
-packet Packet {
-    a: 4,
-}
-
-struct RecursiveStruct_0 : RecursiveStruct_1 {
-}
-
-struct RecursiveStruct_1 : RecursiveStruct_0 {
-}
-
-struct InvalidParent : Packet {
-}
-
-struct UndeclaredParent : FooBar {
-}
-
-struct UnnecessaryConstraints (a=1) {
-}
-
-struct Undeclared : Struct (c=1) {
-}
-
-struct Redeclared : Struct (a=1, a=2) {
-}
-
-struct TypeMismatch : Struct (a=tag, b=1, c=1, d=1) {
-}
-
-struct InvalidLiteral : Struct (a=42) {
-}
-
-struct UndeclaredTag : Struct (b=undeclared_tag) {
-}
-
-struct Correct : Struct (a=1, b=tag) {
-}
diff --git a/tests/examples/typedef-field.pdl b/tests/examples/typedef-field.pdl
deleted file mode 100644
index 2e56676..0000000
--- a/tests/examples/typedef-field.pdl
+++ /dev/null
@@ -1,36 +0,0 @@
-little_endian_packets
-
-custom_field custom: 1 "custom"
-checksum checksum: 1 "checksum"
-
-enum Enum : 1 {
-    tag = 0,
-}
-
-struct Struct {
-    a: 1,
-}
-
-packet Packet {
-    a: 1,
-}
-
-group Group {
-    a: 1,
-}
-
-packet InvalidKind {
-    typedef_0: Group,
-    typedef_1: Packet,
-}
-
-packet UndeclaredType {
-    typedef: Unknown,
-}
-
-packet Correct {
-    typedef_0: custom,
-    typedef_1: checksum,
-    typedef_2: Enum,
-    typedef_3: Struct,
-}
diff --git a/tests/generated/custom_field_declaration_big_endian.rs b/tests/generated/custom_field_declaration_big_endian.rs
index 31fa603..8046f5a 100644
--- a/tests/generated/custom_field_declaration_big_endian.rs
+++ b/tests/generated/custom_field_declaration_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
diff --git a/tests/generated/custom_field_declaration_little_endian.rs b/tests/generated/custom_field_declaration_little_endian.rs
index 31fa603..8046f5a 100644
--- a/tests/generated/custom_field_declaration_little_endian.rs
+++ b/tests/generated/custom_field_declaration_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
diff --git a/tests/generated/enum_declaration_big_endian.rs b/tests/generated/enum_declaration_big_endian.rs
index 87b5d0e..badb3f0 100644
--- a/tests/generated/enum_declaration_big_endian.rs
+++ b/tests/generated/enum_declaration_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
diff --git a/tests/generated/enum_declaration_little_endian.rs b/tests/generated/enum_declaration_little_endian.rs
index 87b5d0e..badb3f0 100644
--- a/tests/generated/enum_declaration_little_endian.rs
+++ b/tests/generated/enum_declaration_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
diff --git a/tests/generated/packet_decl_24bit_enum_array_big_endian.rs b/tests/generated/packet_decl_24bit_enum_array_big_endian.rs
index bd352ef..47b45dc 100644
--- a/tests/generated/packet_decl_24bit_enum_array_big_endian.rs
+++ b/tests/generated/packet_decl_24bit_enum_array_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -99,7 +98,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Bar {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    bar: Arc<BarData>,
+    bar: BarData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -178,13 +177,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = BarData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(bar: Arc<BarData>) -> Result<Self> {
+    fn new(bar: BarData) -> Result<Self> {
         Ok(Self { bar })
     }
     pub fn get_x(&self) -> &[Foo; 5] {
-        &self.bar.as_ref().x
+        &self.bar.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.bar.write_to(buffer)
@@ -195,7 +194,7 @@
 }
 impl BarBuilder {
     pub fn build(self) -> Bar {
-        let bar = Arc::new(BarData { x: self.x });
+        let bar = BarData { x: self.x };
         Bar::new(bar).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_24bit_enum_array_little_endian.rs b/tests/generated/packet_decl_24bit_enum_array_little_endian.rs
index 5027984..a413ce1 100644
--- a/tests/generated/packet_decl_24bit_enum_array_little_endian.rs
+++ b/tests/generated/packet_decl_24bit_enum_array_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -99,7 +98,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Bar {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    bar: Arc<BarData>,
+    bar: BarData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -178,13 +177,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = BarData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(bar: Arc<BarData>) -> Result<Self> {
+    fn new(bar: BarData) -> Result<Self> {
         Ok(Self { bar })
     }
     pub fn get_x(&self) -> &[Foo; 5] {
-        &self.bar.as_ref().x
+        &self.bar.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.bar.write_to(buffer)
@@ -195,7 +194,7 @@
 }
 impl BarBuilder {
     pub fn build(self) -> Bar {
-        let bar = Arc::new(BarData { x: self.x });
+        let bar = BarData { x: self.x };
         Bar::new(bar).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_24bit_enum_big_endian.rs b/tests/generated/packet_decl_24bit_enum_big_endian.rs
index d2b63be..c63b562 100644
--- a/tests/generated/packet_decl_24bit_enum_big_endian.rs
+++ b/tests/generated/packet_decl_24bit_enum_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -99,7 +98,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Bar {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    bar: Arc<BarData>,
+    bar: BarData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -170,13 +169,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = BarData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(bar: Arc<BarData>) -> Result<Self> {
+    fn new(bar: BarData) -> Result<Self> {
         Ok(Self { bar })
     }
     pub fn get_x(&self) -> Foo {
-        self.bar.as_ref().x
+        self.bar.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.bar.write_to(buffer)
@@ -187,7 +186,7 @@
 }
 impl BarBuilder {
     pub fn build(self) -> Bar {
-        let bar = Arc::new(BarData { x: self.x });
+        let bar = BarData { x: self.x };
         Bar::new(bar).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_24bit_enum_little_endian.rs b/tests/generated/packet_decl_24bit_enum_little_endian.rs
index 40f9894..2e58a9e 100644
--- a/tests/generated/packet_decl_24bit_enum_little_endian.rs
+++ b/tests/generated/packet_decl_24bit_enum_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -99,7 +98,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Bar {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    bar: Arc<BarData>,
+    bar: BarData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -170,13 +169,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = BarData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(bar: Arc<BarData>) -> Result<Self> {
+    fn new(bar: BarData) -> Result<Self> {
         Ok(Self { bar })
     }
     pub fn get_x(&self) -> Foo {
-        self.bar.as_ref().x
+        self.bar.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.bar.write_to(buffer)
@@ -187,7 +186,7 @@
 }
 impl BarBuilder {
     pub fn build(self) -> Bar {
-        let bar = Arc::new(BarData { x: self.x });
+        let bar = BarData { x: self.x };
         Bar::new(bar).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_24bit_scalar_array_big_endian.rs b/tests/generated/packet_decl_24bit_scalar_array_big_endian.rs
index eaa7537..193c5e5 100644
--- a/tests/generated/packet_decl_24bit_scalar_array_big_endian.rs
+++ b/tests/generated/packet_decl_24bit_scalar_array_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -53,7 +52,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -124,13 +123,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_x(&self) -> &[u32; 5] {
-        &self.foo.as_ref().x
+        &self.foo.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -141,7 +140,7 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData { x: self.x });
+        let foo = FooData { x: self.x };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_24bit_scalar_array_little_endian.rs b/tests/generated/packet_decl_24bit_scalar_array_little_endian.rs
index f987846..fafba2c 100644
--- a/tests/generated/packet_decl_24bit_scalar_array_little_endian.rs
+++ b/tests/generated/packet_decl_24bit_scalar_array_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -53,7 +52,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -124,13 +123,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_x(&self) -> &[u32; 5] {
-        &self.foo.as_ref().x
+        &self.foo.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -141,7 +140,7 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData { x: self.x });
+        let foo = FooData { x: self.x };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_24bit_scalar_big_endian.rs b/tests/generated/packet_decl_24bit_scalar_big_endian.rs
index e5aa0e2..15e76b0 100644
--- a/tests/generated/packet_decl_24bit_scalar_big_endian.rs
+++ b/tests/generated/packet_decl_24bit_scalar_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -53,7 +52,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -121,13 +120,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_x(&self) -> u32 {
-        self.foo.as_ref().x
+        self.foo.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -138,7 +137,7 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData { x: self.x });
+        let foo = FooData { x: self.x };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_24bit_scalar_little_endian.rs b/tests/generated/packet_decl_24bit_scalar_little_endian.rs
index c9a65ed..77ede78 100644
--- a/tests/generated/packet_decl_24bit_scalar_little_endian.rs
+++ b/tests/generated/packet_decl_24bit_scalar_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -53,7 +52,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -121,13 +120,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_x(&self) -> u32 {
-        self.foo.as_ref().x
+        self.foo.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -138,7 +137,7 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData { x: self.x });
+        let foo = FooData { x: self.x };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_64bit_enum_array_big_endian.rs b/tests/generated/packet_decl_64bit_enum_array_big_endian.rs
index 6940901..dd28666 100644
--- a/tests/generated/packet_decl_64bit_enum_array_big_endian.rs
+++ b/tests/generated/packet_decl_64bit_enum_array_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -84,7 +83,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Bar {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    bar: Arc<BarData>,
+    bar: BarData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -163,13 +162,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = BarData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(bar: Arc<BarData>) -> Result<Self> {
+    fn new(bar: BarData) -> Result<Self> {
         Ok(Self { bar })
     }
     pub fn get_x(&self) -> &[Foo; 7] {
-        &self.bar.as_ref().x
+        &self.bar.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.bar.write_to(buffer)
@@ -180,7 +179,7 @@
 }
 impl BarBuilder {
     pub fn build(self) -> Bar {
-        let bar = Arc::new(BarData { x: self.x });
+        let bar = BarData { x: self.x };
         Bar::new(bar).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_64bit_enum_array_little_endian.rs b/tests/generated/packet_decl_64bit_enum_array_little_endian.rs
index a7008b3..371c1eb 100644
--- a/tests/generated/packet_decl_64bit_enum_array_little_endian.rs
+++ b/tests/generated/packet_decl_64bit_enum_array_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -84,7 +83,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Bar {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    bar: Arc<BarData>,
+    bar: BarData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -163,13 +162,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = BarData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(bar: Arc<BarData>) -> Result<Self> {
+    fn new(bar: BarData) -> Result<Self> {
         Ok(Self { bar })
     }
     pub fn get_x(&self) -> &[Foo; 7] {
-        &self.bar.as_ref().x
+        &self.bar.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.bar.write_to(buffer)
@@ -180,7 +179,7 @@
 }
 impl BarBuilder {
     pub fn build(self) -> Bar {
-        let bar = Arc::new(BarData { x: self.x });
+        let bar = BarData { x: self.x };
         Bar::new(bar).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_64bit_enum_big_endian.rs b/tests/generated/packet_decl_64bit_enum_big_endian.rs
index a8f182c..bd46742 100644
--- a/tests/generated/packet_decl_64bit_enum_big_endian.rs
+++ b/tests/generated/packet_decl_64bit_enum_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -84,7 +83,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Bar {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    bar: Arc<BarData>,
+    bar: BarData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -155,13 +154,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = BarData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(bar: Arc<BarData>) -> Result<Self> {
+    fn new(bar: BarData) -> Result<Self> {
         Ok(Self { bar })
     }
     pub fn get_x(&self) -> Foo {
-        self.bar.as_ref().x
+        self.bar.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.bar.write_to(buffer)
@@ -172,7 +171,7 @@
 }
 impl BarBuilder {
     pub fn build(self) -> Bar {
-        let bar = Arc::new(BarData { x: self.x });
+        let bar = BarData { x: self.x };
         Bar::new(bar).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_64bit_enum_little_endian.rs b/tests/generated/packet_decl_64bit_enum_little_endian.rs
index 8fa8467..75a43b6 100644
--- a/tests/generated/packet_decl_64bit_enum_little_endian.rs
+++ b/tests/generated/packet_decl_64bit_enum_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -84,7 +83,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Bar {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    bar: Arc<BarData>,
+    bar: BarData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -155,13 +154,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = BarData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(bar: Arc<BarData>) -> Result<Self> {
+    fn new(bar: BarData) -> Result<Self> {
         Ok(Self { bar })
     }
     pub fn get_x(&self) -> Foo {
-        self.bar.as_ref().x
+        self.bar.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.bar.write_to(buffer)
@@ -172,7 +171,7 @@
 }
 impl BarBuilder {
     pub fn build(self) -> Bar {
-        let bar = Arc::new(BarData { x: self.x });
+        let bar = BarData { x: self.x };
         Bar::new(bar).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_64bit_scalar_array_big_endian.rs b/tests/generated/packet_decl_64bit_scalar_array_big_endian.rs
index d162424..b4816d6 100644
--- a/tests/generated/packet_decl_64bit_scalar_array_big_endian.rs
+++ b/tests/generated/packet_decl_64bit_scalar_array_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -53,7 +52,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -124,13 +123,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_x(&self) -> &[u64; 7] {
-        &self.foo.as_ref().x
+        &self.foo.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -141,7 +140,7 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData { x: self.x });
+        let foo = FooData { x: self.x };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_64bit_scalar_array_little_endian.rs b/tests/generated/packet_decl_64bit_scalar_array_little_endian.rs
index 5d8c77e..b6c3423 100644
--- a/tests/generated/packet_decl_64bit_scalar_array_little_endian.rs
+++ b/tests/generated/packet_decl_64bit_scalar_array_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -53,7 +52,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -124,13 +123,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_x(&self) -> &[u64; 7] {
-        &self.foo.as_ref().x
+        &self.foo.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -141,7 +140,7 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData { x: self.x });
+        let foo = FooData { x: self.x };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_64bit_scalar_big_endian.rs b/tests/generated/packet_decl_64bit_scalar_big_endian.rs
index 176a4af..1cda594 100644
--- a/tests/generated/packet_decl_64bit_scalar_big_endian.rs
+++ b/tests/generated/packet_decl_64bit_scalar_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -53,7 +52,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -118,13 +117,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_x(&self) -> u64 {
-        self.foo.as_ref().x
+        self.foo.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -135,7 +134,7 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData { x: self.x });
+        let foo = FooData { x: self.x };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_64bit_scalar_little_endian.rs b/tests/generated/packet_decl_64bit_scalar_little_endian.rs
index 3f26f6c..10e62d4 100644
--- a/tests/generated/packet_decl_64bit_scalar_little_endian.rs
+++ b/tests/generated/packet_decl_64bit_scalar_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -53,7 +52,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -118,13 +117,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_x(&self) -> u64 {
-        self.foo.as_ref().x
+        self.foo.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -135,7 +134,7 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData { x: self.x });
+        let foo = FooData { x: self.x };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_8bit_enum_array_big_endian.rs b/tests/generated/packet_decl_8bit_enum_array_big_endian.rs
index ef47d85..4c16ddf 100644
--- a/tests/generated/packet_decl_8bit_enum_array_big_endian.rs
+++ b/tests/generated/packet_decl_8bit_enum_array_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -114,7 +113,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Bar {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    bar: Arc<BarData>,
+    bar: BarData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -193,13 +192,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = BarData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(bar: Arc<BarData>) -> Result<Self> {
+    fn new(bar: BarData) -> Result<Self> {
         Ok(Self { bar })
     }
     pub fn get_x(&self) -> &[Foo; 3] {
-        &self.bar.as_ref().x
+        &self.bar.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.bar.write_to(buffer)
@@ -210,7 +209,7 @@
 }
 impl BarBuilder {
     pub fn build(self) -> Bar {
-        let bar = Arc::new(BarData { x: self.x });
+        let bar = BarData { x: self.x };
         Bar::new(bar).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_8bit_enum_array_little_endian.rs b/tests/generated/packet_decl_8bit_enum_array_little_endian.rs
index ef47d85..4c16ddf 100644
--- a/tests/generated/packet_decl_8bit_enum_array_little_endian.rs
+++ b/tests/generated/packet_decl_8bit_enum_array_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -114,7 +113,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Bar {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    bar: Arc<BarData>,
+    bar: BarData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -193,13 +192,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = BarData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(bar: Arc<BarData>) -> Result<Self> {
+    fn new(bar: BarData) -> Result<Self> {
         Ok(Self { bar })
     }
     pub fn get_x(&self) -> &[Foo; 3] {
-        &self.bar.as_ref().x
+        &self.bar.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.bar.write_to(buffer)
@@ -210,7 +209,7 @@
 }
 impl BarBuilder {
     pub fn build(self) -> Bar {
-        let bar = Arc::new(BarData { x: self.x });
+        let bar = BarData { x: self.x };
         Bar::new(bar).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_8bit_enum_big_endian.rs b/tests/generated/packet_decl_8bit_enum_big_endian.rs
index b3c4979..8ceb132 100644
--- a/tests/generated/packet_decl_8bit_enum_big_endian.rs
+++ b/tests/generated/packet_decl_8bit_enum_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -114,7 +113,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Bar {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    bar: Arc<BarData>,
+    bar: BarData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -185,13 +184,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = BarData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(bar: Arc<BarData>) -> Result<Self> {
+    fn new(bar: BarData) -> Result<Self> {
         Ok(Self { bar })
     }
     pub fn get_x(&self) -> Foo {
-        self.bar.as_ref().x
+        self.bar.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.bar.write_to(buffer)
@@ -202,7 +201,7 @@
 }
 impl BarBuilder {
     pub fn build(self) -> Bar {
-        let bar = Arc::new(BarData { x: self.x });
+        let bar = BarData { x: self.x };
         Bar::new(bar).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_8bit_enum_little_endian.rs b/tests/generated/packet_decl_8bit_enum_little_endian.rs
index b3c4979..8ceb132 100644
--- a/tests/generated/packet_decl_8bit_enum_little_endian.rs
+++ b/tests/generated/packet_decl_8bit_enum_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -114,7 +113,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Bar {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    bar: Arc<BarData>,
+    bar: BarData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -185,13 +184,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = BarData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(bar: Arc<BarData>) -> Result<Self> {
+    fn new(bar: BarData) -> Result<Self> {
         Ok(Self { bar })
     }
     pub fn get_x(&self) -> Foo {
-        self.bar.as_ref().x
+        self.bar.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.bar.write_to(buffer)
@@ -202,7 +201,7 @@
 }
 impl BarBuilder {
     pub fn build(self) -> Bar {
-        let bar = Arc::new(BarData { x: self.x });
+        let bar = BarData { x: self.x };
         Bar::new(bar).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_8bit_scalar_array_big_endian.rs b/tests/generated/packet_decl_8bit_scalar_array_big_endian.rs
index a1915a2..518a775 100644
--- a/tests/generated/packet_decl_8bit_scalar_array_big_endian.rs
+++ b/tests/generated/packet_decl_8bit_scalar_array_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -53,7 +52,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -124,13 +123,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_x(&self) -> &[u8; 3] {
-        &self.foo.as_ref().x
+        &self.foo.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -141,7 +140,7 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData { x: self.x });
+        let foo = FooData { x: self.x };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_8bit_scalar_array_little_endian.rs b/tests/generated/packet_decl_8bit_scalar_array_little_endian.rs
index a1915a2..518a775 100644
--- a/tests/generated/packet_decl_8bit_scalar_array_little_endian.rs
+++ b/tests/generated/packet_decl_8bit_scalar_array_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -53,7 +52,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -124,13 +123,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_x(&self) -> &[u8; 3] {
-        &self.foo.as_ref().x
+        &self.foo.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -141,7 +140,7 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData { x: self.x });
+        let foo = FooData { x: self.x };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_8bit_scalar_big_endian.rs b/tests/generated/packet_decl_8bit_scalar_big_endian.rs
index ae3515a..19b51a9 100644
--- a/tests/generated/packet_decl_8bit_scalar_big_endian.rs
+++ b/tests/generated/packet_decl_8bit_scalar_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -53,7 +52,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -118,13 +117,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_x(&self) -> u8 {
-        self.foo.as_ref().x
+        self.foo.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -135,7 +134,7 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData { x: self.x });
+        let foo = FooData { x: self.x };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_8bit_scalar_little_endian.rs b/tests/generated/packet_decl_8bit_scalar_little_endian.rs
index ae3515a..19b51a9 100644
--- a/tests/generated/packet_decl_8bit_scalar_little_endian.rs
+++ b/tests/generated/packet_decl_8bit_scalar_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -53,7 +52,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -118,13 +117,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_x(&self) -> u8 {
-        self.foo.as_ref().x
+        self.foo.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -135,7 +134,7 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData { x: self.x });
+        let foo = FooData { x: self.x };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_array_dynamic_count_big_endian.rs b/tests/generated/packet_decl_array_dynamic_count_big_endian.rs
index c9a5e22..e1887d6 100644
--- a/tests/generated/packet_decl_array_dynamic_count_big_endian.rs
+++ b/tests/generated/packet_decl_array_dynamic_count_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -54,7 +53,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -144,16 +143,16 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_padding(&self) -> u8 {
-        self.foo.as_ref().padding
+        self.foo.padding
     }
     pub fn get_x(&self) -> &Vec<u32> {
-        &self.foo.as_ref().x
+        &self.foo.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -164,10 +163,10 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {
+        let foo = FooData {
             padding: self.padding,
             x: self.x,
-        });
+        };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_array_dynamic_count_little_endian.rs b/tests/generated/packet_decl_array_dynamic_count_little_endian.rs
index 7a9f27f..a7fcdd1 100644
--- a/tests/generated/packet_decl_array_dynamic_count_little_endian.rs
+++ b/tests/generated/packet_decl_array_dynamic_count_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -54,7 +53,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -144,16 +143,16 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_padding(&self) -> u8 {
-        self.foo.as_ref().padding
+        self.foo.padding
     }
     pub fn get_x(&self) -> &Vec<u32> {
-        &self.foo.as_ref().x
+        &self.foo.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -164,10 +163,10 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {
+        let foo = FooData {
             padding: self.padding,
             x: self.x,
-        });
+        };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_array_dynamic_size_big_endian.rs b/tests/generated/packet_decl_array_dynamic_size_big_endian.rs
index ec48736..934b21f 100644
--- a/tests/generated/packet_decl_array_dynamic_size_big_endian.rs
+++ b/tests/generated/packet_decl_array_dynamic_size_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -54,7 +53,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -155,16 +154,16 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_padding(&self) -> u8 {
-        self.foo.as_ref().padding
+        self.foo.padding
     }
     pub fn get_x(&self) -> &Vec<u32> {
-        &self.foo.as_ref().x
+        &self.foo.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -175,10 +174,10 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {
+        let foo = FooData {
             padding: self.padding,
             x: self.x,
-        });
+        };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_array_dynamic_size_little_endian.rs b/tests/generated/packet_decl_array_dynamic_size_little_endian.rs
index cec18ee..d56c554 100644
--- a/tests/generated/packet_decl_array_dynamic_size_little_endian.rs
+++ b/tests/generated/packet_decl_array_dynamic_size_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -54,7 +53,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -155,16 +154,16 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_padding(&self) -> u8 {
-        self.foo.as_ref().padding
+        self.foo.padding
     }
     pub fn get_x(&self) -> &Vec<u32> {
-        &self.foo.as_ref().x
+        &self.foo.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -175,10 +174,10 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {
+        let foo = FooData {
             padding: self.padding,
             x: self.x,
-        });
+        };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_array_unknown_element_width_dynamic_count_big_endian.rs b/tests/generated/packet_decl_array_unknown_element_width_dynamic_count_big_endian.rs
index b57eb29..0ddc911 100644
--- a/tests/generated/packet_decl_array_unknown_element_width_dynamic_count_big_endian.rs
+++ b/tests/generated/packet_decl_array_unknown_element_width_dynamic_count_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -107,7 +106,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Bar {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    bar: Arc<BarData>,
+    bar: BarData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -184,13 +183,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = BarData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(bar: Arc<BarData>) -> Result<Self> {
+    fn new(bar: BarData) -> Result<Self> {
         Ok(Self { bar })
     }
     pub fn get_x(&self) -> &Vec<Foo> {
-        &self.bar.as_ref().x
+        &self.bar.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.bar.write_to(buffer)
@@ -201,7 +200,7 @@
 }
 impl BarBuilder {
     pub fn build(self) -> Bar {
-        let bar = Arc::new(BarData { x: self.x });
+        let bar = BarData { x: self.x };
         Bar::new(bar).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_array_unknown_element_width_dynamic_count_little_endian.rs b/tests/generated/packet_decl_array_unknown_element_width_dynamic_count_little_endian.rs
index 3fb7990..86a85e4 100644
--- a/tests/generated/packet_decl_array_unknown_element_width_dynamic_count_little_endian.rs
+++ b/tests/generated/packet_decl_array_unknown_element_width_dynamic_count_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -107,7 +106,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Bar {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    bar: Arc<BarData>,
+    bar: BarData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -184,13 +183,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = BarData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(bar: Arc<BarData>) -> Result<Self> {
+    fn new(bar: BarData) -> Result<Self> {
         Ok(Self { bar })
     }
     pub fn get_x(&self) -> &Vec<Foo> {
-        &self.bar.as_ref().x
+        &self.bar.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.bar.write_to(buffer)
@@ -201,7 +200,7 @@
 }
 impl BarBuilder {
     pub fn build(self) -> Bar {
-        let bar = Arc::new(BarData { x: self.x });
+        let bar = BarData { x: self.x };
         Bar::new(bar).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_array_unknown_element_width_dynamic_size_big_endian.rs b/tests/generated/packet_decl_array_unknown_element_width_dynamic_size_big_endian.rs
index ee4459e..bd67530 100644
--- a/tests/generated/packet_decl_array_unknown_element_width_dynamic_size_big_endian.rs
+++ b/tests/generated/packet_decl_array_unknown_element_width_dynamic_size_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -107,7 +106,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Bar {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    bar: Arc<BarData>,
+    bar: BarData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -196,13 +195,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = BarData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(bar: Arc<BarData>) -> Result<Self> {
+    fn new(bar: BarData) -> Result<Self> {
         Ok(Self { bar })
     }
     pub fn get_x(&self) -> &Vec<Foo> {
-        &self.bar.as_ref().x
+        &self.bar.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.bar.write_to(buffer)
@@ -213,7 +212,7 @@
 }
 impl BarBuilder {
     pub fn build(self) -> Bar {
-        let bar = Arc::new(BarData { x: self.x });
+        let bar = BarData { x: self.x };
         Bar::new(bar).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_array_unknown_element_width_dynamic_size_little_endian.rs b/tests/generated/packet_decl_array_unknown_element_width_dynamic_size_little_endian.rs
index a0605eb..c41a8d4 100644
--- a/tests/generated/packet_decl_array_unknown_element_width_dynamic_size_little_endian.rs
+++ b/tests/generated/packet_decl_array_unknown_element_width_dynamic_size_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -107,7 +106,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Bar {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    bar: Arc<BarData>,
+    bar: BarData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -196,13 +195,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = BarData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(bar: Arc<BarData>) -> Result<Self> {
+    fn new(bar: BarData) -> Result<Self> {
         Ok(Self { bar })
     }
     pub fn get_x(&self) -> &Vec<Foo> {
-        &self.bar.as_ref().x
+        &self.bar.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.bar.write_to(buffer)
@@ -213,7 +212,7 @@
 }
 impl BarBuilder {
     pub fn build(self) -> Bar {
-        let bar = Arc::new(BarData { x: self.x });
+        let bar = BarData { x: self.x };
         Bar::new(bar).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_array_with_padding_big_endian.rs b/tests/generated/packet_decl_array_with_padding_big_endian.rs
index 36b5571..e45dc03 100644
--- a/tests/generated/packet_decl_array_with_padding_big_endian.rs
+++ b/tests/generated/packet_decl_array_with_padding_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -107,7 +106,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Bar {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    bar: Arc<BarData>,
+    bar: BarData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -188,13 +187,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = BarData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(bar: Arc<BarData>) -> Result<Self> {
+    fn new(bar: BarData) -> Result<Self> {
         Ok(Self { bar })
     }
     pub fn get_a(&self) -> &Vec<Foo> {
-        &self.bar.as_ref().a
+        &self.bar.a
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.bar.write_to(buffer)
@@ -205,7 +204,7 @@
 }
 impl BarBuilder {
     pub fn build(self) -> Bar {
-        let bar = Arc::new(BarData { a: self.a });
+        let bar = BarData { a: self.a };
         Bar::new(bar).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_array_with_padding_little_endian.rs b/tests/generated/packet_decl_array_with_padding_little_endian.rs
index 53cec92..bd1aae0 100644
--- a/tests/generated/packet_decl_array_with_padding_little_endian.rs
+++ b/tests/generated/packet_decl_array_with_padding_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -107,7 +106,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Bar {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    bar: Arc<BarData>,
+    bar: BarData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -188,13 +187,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = BarData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(bar: Arc<BarData>) -> Result<Self> {
+    fn new(bar: BarData) -> Result<Self> {
         Ok(Self { bar })
     }
     pub fn get_a(&self) -> &Vec<Foo> {
-        &self.bar.as_ref().a
+        &self.bar.a
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.bar.write_to(buffer)
@@ -205,7 +204,7 @@
 }
 impl BarBuilder {
     pub fn build(self) -> Bar {
-        let bar = Arc::new(BarData { a: self.a });
+        let bar = BarData { a: self.a };
         Bar::new(bar).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_child_packets_big_endian.rs b/tests/generated/packet_decl_child_packets_big_endian.rs
index e8468a7..7a000c7 100644
--- a/tests/generated/packet_decl_child_packets_big_endian.rs
+++ b/tests/generated/packet_decl_child_packets_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -98,8 +97,8 @@
 #[derive(Debug, Clone, PartialEq, Eq)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub enum FooDataChild {
-    Bar(Arc<BarData>),
-    Baz(Arc<BazData>),
+    Bar(BarData),
+    Baz(BazData),
     Payload(Bytes),
     None,
 }
@@ -132,7 +131,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -194,12 +193,12 @@
             (100, _) if BarData::conforms(&payload) => {
                 let mut cell = Cell::new(payload);
                 let child_data = BarData::parse_inner(&mut cell)?;
-                FooDataChild::Bar(Arc::new(child_data))
+                FooDataChild::Bar(child_data)
             }
             (_, Enum16::B) if BazData::conforms(&payload) => {
                 let mut cell = Cell::new(payload);
                 let child_data = BazData::parse_inner(&mut cell)?;
-                FooDataChild::Baz(Arc::new(child_data))
+                FooDataChild::Baz(child_data)
             }
             _ if !payload.is_empty() => {
                 FooDataChild::Payload(Bytes::copy_from_slice(payload))
@@ -260,7 +259,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> FooChild {
         match &self.foo.child {
@@ -270,14 +269,14 @@
             FooDataChild::None => FooChild::None,
         }
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_a(&self) -> u8 {
-        self.foo.as_ref().a
+        self.foo.a
     }
     pub fn get_b(&self) -> Enum16 {
-        self.foo.as_ref().b
+        self.foo.b
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -288,14 +287,14 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {
+        let foo = FooData {
             a: self.a,
             b: self.b,
             child: match self.payload {
                 None => FooDataChild::None,
                 Some(bytes) => FooDataChild::Payload(bytes),
             },
-        });
+        };
         Foo::new(foo).unwrap()
     }
 }
@@ -313,9 +312,9 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Bar {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    bar: Arc<BarData>,
+    bar: BarData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -392,9 +391,9 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         let bar = match &foo.child {
             FooDataChild::Bar(value) => value.clone(),
             _ => {
@@ -407,13 +406,13 @@
         Ok(Self { foo, bar })
     }
     pub fn get_a(&self) -> u8 {
-        self.foo.as_ref().a
+        self.foo.a
     }
     pub fn get_b(&self) -> Enum16 {
-        self.foo.as_ref().b
+        self.foo.b
     }
     pub fn get_x(&self) -> u8 {
-        self.bar.as_ref().x
+        self.bar.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.bar.write_to(buffer)
@@ -424,12 +423,12 @@
 }
 impl BarBuilder {
     pub fn build(self) -> Bar {
-        let bar = Arc::new(BarData { x: self.x });
-        let foo = Arc::new(FooData {
+        let bar = BarData { x: self.x };
+        let foo = FooData {
             a: 100,
             b: self.b,
             child: FooDataChild::Bar(bar),
-        });
+        };
         Bar::new(foo).unwrap()
     }
 }
@@ -452,9 +451,9 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Baz {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    baz: Arc<BazData>,
+    baz: BazData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -531,9 +530,9 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         let baz = match &foo.child {
             FooDataChild::Baz(value) => value.clone(),
             _ => {
@@ -546,13 +545,13 @@
         Ok(Self { foo, baz })
     }
     pub fn get_a(&self) -> u8 {
-        self.foo.as_ref().a
+        self.foo.a
     }
     pub fn get_b(&self) -> Enum16 {
-        self.foo.as_ref().b
+        self.foo.b
     }
     pub fn get_y(&self) -> u16 {
-        self.baz.as_ref().y
+        self.baz.y
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.baz.write_to(buffer)
@@ -563,12 +562,12 @@
 }
 impl BazBuilder {
     pub fn build(self) -> Baz {
-        let baz = Arc::new(BazData { y: self.y });
-        let foo = Arc::new(FooData {
+        let baz = BazData { y: self.y };
+        let foo = FooData {
             a: self.a,
             b: Enum16::B,
             child: FooDataChild::Baz(baz),
-        });
+        };
         Baz::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_child_packets_little_endian.rs b/tests/generated/packet_decl_child_packets_little_endian.rs
index bbbb261..7fe9783 100644
--- a/tests/generated/packet_decl_child_packets_little_endian.rs
+++ b/tests/generated/packet_decl_child_packets_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -98,8 +97,8 @@
 #[derive(Debug, Clone, PartialEq, Eq)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub enum FooDataChild {
-    Bar(Arc<BarData>),
-    Baz(Arc<BazData>),
+    Bar(BarData),
+    Baz(BazData),
     Payload(Bytes),
     None,
 }
@@ -132,7 +131,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -194,12 +193,12 @@
             (100, _) if BarData::conforms(&payload) => {
                 let mut cell = Cell::new(payload);
                 let child_data = BarData::parse_inner(&mut cell)?;
-                FooDataChild::Bar(Arc::new(child_data))
+                FooDataChild::Bar(child_data)
             }
             (_, Enum16::B) if BazData::conforms(&payload) => {
                 let mut cell = Cell::new(payload);
                 let child_data = BazData::parse_inner(&mut cell)?;
-                FooDataChild::Baz(Arc::new(child_data))
+                FooDataChild::Baz(child_data)
             }
             _ if !payload.is_empty() => {
                 FooDataChild::Payload(Bytes::copy_from_slice(payload))
@@ -260,7 +259,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> FooChild {
         match &self.foo.child {
@@ -270,14 +269,14 @@
             FooDataChild::None => FooChild::None,
         }
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_a(&self) -> u8 {
-        self.foo.as_ref().a
+        self.foo.a
     }
     pub fn get_b(&self) -> Enum16 {
-        self.foo.as_ref().b
+        self.foo.b
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -288,14 +287,14 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {
+        let foo = FooData {
             a: self.a,
             b: self.b,
             child: match self.payload {
                 None => FooDataChild::None,
                 Some(bytes) => FooDataChild::Payload(bytes),
             },
-        });
+        };
         Foo::new(foo).unwrap()
     }
 }
@@ -313,9 +312,9 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Bar {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    bar: Arc<BarData>,
+    bar: BarData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -392,9 +391,9 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         let bar = match &foo.child {
             FooDataChild::Bar(value) => value.clone(),
             _ => {
@@ -407,13 +406,13 @@
         Ok(Self { foo, bar })
     }
     pub fn get_a(&self) -> u8 {
-        self.foo.as_ref().a
+        self.foo.a
     }
     pub fn get_b(&self) -> Enum16 {
-        self.foo.as_ref().b
+        self.foo.b
     }
     pub fn get_x(&self) -> u8 {
-        self.bar.as_ref().x
+        self.bar.x
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.bar.write_to(buffer)
@@ -424,12 +423,12 @@
 }
 impl BarBuilder {
     pub fn build(self) -> Bar {
-        let bar = Arc::new(BarData { x: self.x });
-        let foo = Arc::new(FooData {
+        let bar = BarData { x: self.x };
+        let foo = FooData {
             a: 100,
             b: self.b,
             child: FooDataChild::Bar(bar),
-        });
+        };
         Bar::new(foo).unwrap()
     }
 }
@@ -452,9 +451,9 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Baz {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    baz: Arc<BazData>,
+    baz: BazData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -531,9 +530,9 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         let baz = match &foo.child {
             FooDataChild::Baz(value) => value.clone(),
             _ => {
@@ -546,13 +545,13 @@
         Ok(Self { foo, baz })
     }
     pub fn get_a(&self) -> u8 {
-        self.foo.as_ref().a
+        self.foo.a
     }
     pub fn get_b(&self) -> Enum16 {
-        self.foo.as_ref().b
+        self.foo.b
     }
     pub fn get_y(&self) -> u16 {
-        self.baz.as_ref().y
+        self.baz.y
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.baz.write_to(buffer)
@@ -563,12 +562,12 @@
 }
 impl BazBuilder {
     pub fn build(self) -> Baz {
-        let baz = Arc::new(BazData { y: self.y });
-        let foo = Arc::new(FooData {
+        let baz = BazData { y: self.y };
+        let foo = FooData {
             a: self.a,
             b: Enum16::B,
             child: FooDataChild::Baz(baz),
-        });
+        };
         Baz::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_complex_scalars_big_endian.rs b/tests/generated/packet_decl_complex_scalars_big_endian.rs
index 688af42..be97361 100644
--- a/tests/generated/packet_decl_complex_scalars_big_endian.rs
+++ b/tests/generated/packet_decl_complex_scalars_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -58,7 +57,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -168,28 +167,28 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_a(&self) -> u8 {
-        self.foo.as_ref().a
+        self.foo.a
     }
     pub fn get_b(&self) -> u8 {
-        self.foo.as_ref().b
+        self.foo.b
     }
     pub fn get_c(&self) -> u8 {
-        self.foo.as_ref().c
+        self.foo.c
     }
     pub fn get_d(&self) -> u32 {
-        self.foo.as_ref().d
+        self.foo.d
     }
     pub fn get_e(&self) -> u16 {
-        self.foo.as_ref().e
+        self.foo.e
     }
     pub fn get_f(&self) -> u8 {
-        self.foo.as_ref().f
+        self.foo.f
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -200,14 +199,14 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {
+        let foo = FooData {
             a: self.a,
             b: self.b,
             c: self.c,
             d: self.d,
             e: self.e,
             f: self.f,
-        });
+        };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_complex_scalars_little_endian.rs b/tests/generated/packet_decl_complex_scalars_little_endian.rs
index 83da632..7ccee61 100644
--- a/tests/generated/packet_decl_complex_scalars_little_endian.rs
+++ b/tests/generated/packet_decl_complex_scalars_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -58,7 +57,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -168,28 +167,28 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_a(&self) -> u8 {
-        self.foo.as_ref().a
+        self.foo.a
     }
     pub fn get_b(&self) -> u8 {
-        self.foo.as_ref().b
+        self.foo.b
     }
     pub fn get_c(&self) -> u8 {
-        self.foo.as_ref().c
+        self.foo.c
     }
     pub fn get_d(&self) -> u32 {
-        self.foo.as_ref().d
+        self.foo.d
     }
     pub fn get_e(&self) -> u16 {
-        self.foo.as_ref().e
+        self.foo.e
     }
     pub fn get_f(&self) -> u8 {
-        self.foo.as_ref().f
+        self.foo.f
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -200,14 +199,14 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {
+        let foo = FooData {
             a: self.a,
             b: self.b,
             c: self.c,
             d: self.d,
             e: self.e,
             f: self.f,
-        });
+        };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_custom_field_big_endian.rs b/tests/generated/packet_decl_custom_field_big_endian.rs
index 72bb2c6..7b7dc9a 100644
--- a/tests/generated/packet_decl_custom_field_big_endian.rs
+++ b/tests/generated/packet_decl_custom_field_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -93,7 +92,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -154,16 +153,16 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_a(&self) -> Bar1 {
-        self.foo.as_ref().a
+        self.foo.a
     }
     pub fn get_b(&self) -> Bar2 {
-        self.foo.as_ref().b
+        self.foo.b
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -174,7 +173,7 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData { a: self.a, b: self.b });
+        let foo = FooData { a: self.a, b: self.b };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_custom_field_little_endian.rs b/tests/generated/packet_decl_custom_field_little_endian.rs
index 600bab6..d805403 100644
--- a/tests/generated/packet_decl_custom_field_little_endian.rs
+++ b/tests/generated/packet_decl_custom_field_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -93,7 +92,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -154,16 +153,16 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_a(&self) -> Bar1 {
-        self.foo.as_ref().a
+        self.foo.a
     }
     pub fn get_b(&self) -> Bar2 {
-        self.foo.as_ref().b
+        self.foo.b
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -174,7 +173,7 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData { a: self.a, b: self.b });
+        let foo = FooData { a: self.a, b: self.b };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_empty_big_endian.rs b/tests/generated/packet_decl_empty_big_endian.rs
index d05c2ff..eb0b173 100644
--- a/tests/generated/packet_decl_empty_big_endian.rs
+++ b/tests/generated/packet_decl_empty_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -51,7 +50,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -104,9 +103,9 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     fn write_to(&self, buffer: &mut BytesMut) {
@@ -118,7 +117,7 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {});
+        let foo = FooData {};
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_empty_little_endian.rs b/tests/generated/packet_decl_empty_little_endian.rs
index d05c2ff..eb0b173 100644
--- a/tests/generated/packet_decl_empty_little_endian.rs
+++ b/tests/generated/packet_decl_empty_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -51,7 +50,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -104,9 +103,9 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     fn write_to(&self, buffer: &mut BytesMut) {
@@ -118,7 +117,7 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {});
+        let foo = FooData {};
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_fixed_enum_field_big_endian.rs b/tests/generated/packet_decl_fixed_enum_field_big_endian.rs
index 8683e02..2ec6b58 100644
--- a/tests/generated/packet_decl_fixed_enum_field_big_endian.rs
+++ b/tests/generated/packet_decl_fixed_enum_field_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -119,7 +118,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -198,13 +197,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_b(&self) -> u64 {
-        self.foo.as_ref().b
+        self.foo.b
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -215,7 +214,7 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData { b: self.b });
+        let foo = FooData { b: self.b };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_fixed_enum_field_little_endian.rs b/tests/generated/packet_decl_fixed_enum_field_little_endian.rs
index f598d3e..13aecd9 100644
--- a/tests/generated/packet_decl_fixed_enum_field_little_endian.rs
+++ b/tests/generated/packet_decl_fixed_enum_field_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -119,7 +118,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -198,13 +197,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_b(&self) -> u64 {
-        self.foo.as_ref().b
+        self.foo.b
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -215,7 +214,7 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData { b: self.b });
+        let foo = FooData { b: self.b };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_fixed_scalar_field_big_endian.rs b/tests/generated/packet_decl_fixed_scalar_field_big_endian.rs
index a44732e..e047669 100644
--- a/tests/generated/packet_decl_fixed_scalar_field_big_endian.rs
+++ b/tests/generated/packet_decl_fixed_scalar_field_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -53,7 +52,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -132,13 +131,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_b(&self) -> u64 {
-        self.foo.as_ref().b
+        self.foo.b
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -149,7 +148,7 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData { b: self.b });
+        let foo = FooData { b: self.b };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_fixed_scalar_field_little_endian.rs b/tests/generated/packet_decl_fixed_scalar_field_little_endian.rs
index d2c7985..39922ca 100644
--- a/tests/generated/packet_decl_fixed_scalar_field_little_endian.rs
+++ b/tests/generated/packet_decl_fixed_scalar_field_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -53,7 +52,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -132,13 +131,13 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_b(&self) -> u64 {
-        self.foo.as_ref().b
+        self.foo.b
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -149,7 +148,7 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData { b: self.b });
+        let foo = FooData { b: self.b };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_grand_children_big_endian.rs b/tests/generated/packet_decl_grand_children_big_endian.rs
index 33432f3..896a46f 100644
--- a/tests/generated/packet_decl_grand_children_big_endian.rs
+++ b/tests/generated/packet_decl_grand_children_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -98,7 +97,7 @@
 #[derive(Debug, Clone, PartialEq, Eq)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub enum ParentDataChild {
-    Child(Arc<ChildData>),
+    Child(ChildData),
     Payload(Bytes),
     None,
 }
@@ -130,7 +129,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Parent {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    parent: Arc<ParentData>,
+    parent: ParentData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -213,7 +212,7 @@
             (Enum16::A) if ChildData::conforms(&payload) => {
                 let mut cell = Cell::new(payload);
                 let child_data = ChildData::parse_inner(&mut cell, bar, baz)?;
-                ParentDataChild::Child(Arc::new(child_data))
+                ParentDataChild::Child(child_data)
             }
             _ if !payload.is_empty() => {
                 ParentDataChild::Payload(Bytes::copy_from_slice(payload))
@@ -274,7 +273,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = ParentData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> ParentChild {
         match &self.parent.child {
@@ -285,17 +284,17 @@
             ParentDataChild::None => ParentChild::None,
         }
     }
-    fn new(parent: Arc<ParentData>) -> Result<Self> {
+    fn new(parent: ParentData) -> Result<Self> {
         Ok(Self { parent })
     }
     pub fn get_bar(&self) -> Enum16 {
-        self.parent.as_ref().bar
+        self.parent.bar
     }
     pub fn get_baz(&self) -> Enum16 {
-        self.parent.as_ref().baz
+        self.parent.baz
     }
     pub fn get_foo(&self) -> Enum16 {
-        self.parent.as_ref().foo
+        self.parent.foo
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.parent.write_to(buffer)
@@ -306,7 +305,7 @@
 }
 impl ParentBuilder {
     pub fn build(self) -> Parent {
-        let parent = Arc::new(ParentData {
+        let parent = ParentData {
             bar: self.bar,
             baz: self.baz,
             foo: self.foo,
@@ -314,7 +313,7 @@
                 None => ParentDataChild::None,
                 Some(bytes) => ParentDataChild::Payload(bytes),
             },
-        });
+        };
         Parent::new(parent).unwrap()
     }
 }
@@ -326,7 +325,7 @@
 #[derive(Debug, Clone, PartialEq, Eq)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub enum ChildDataChild {
-    GrandChild(Arc<GrandChildData>),
+    GrandChild(GrandChildData),
     Payload(Bytes),
     None,
 }
@@ -356,9 +355,9 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Child {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    parent: Arc<ParentData>,
+    parent: ParentData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    child: Arc<ChildData>,
+    child: ChildData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -402,7 +401,7 @@
             (Enum16::A, Enum16::A) if GrandChildData::conforms(&payload) => {
                 let mut cell = Cell::new(payload);
                 let child_data = GrandChildData::parse_inner(&mut cell, baz)?;
-                ChildDataChild::GrandChild(Arc::new(child_data))
+                ChildDataChild::GrandChild(child_data)
             }
             _ if !payload.is_empty() => {
                 ChildDataChild::Payload(Bytes::copy_from_slice(payload))
@@ -465,7 +464,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = ParentData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> ChildChild {
         match &self.child.child {
@@ -476,7 +475,7 @@
             ChildDataChild::None => ChildChild::None,
         }
     }
-    fn new(parent: Arc<ParentData>) -> Result<Self> {
+    fn new(parent: ParentData) -> Result<Self> {
         let child = match &parent.child {
             ParentDataChild::Child(value) => value.clone(),
             _ => {
@@ -489,16 +488,16 @@
         Ok(Self { parent, child })
     }
     pub fn get_bar(&self) -> Enum16 {
-        self.parent.as_ref().bar
+        self.parent.bar
     }
     pub fn get_baz(&self) -> Enum16 {
-        self.parent.as_ref().baz
+        self.parent.baz
     }
     pub fn get_foo(&self) -> Enum16 {
-        self.parent.as_ref().foo
+        self.parent.foo
     }
     pub fn get_quux(&self) -> Enum16 {
-        self.child.as_ref().quux
+        self.child.quux
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.child.write_to(buffer)
@@ -509,19 +508,19 @@
 }
 impl ChildBuilder {
     pub fn build(self) -> Child {
-        let child = Arc::new(ChildData {
+        let child = ChildData {
             quux: self.quux,
             child: match self.payload {
                 None => ChildDataChild::None,
                 Some(bytes) => ChildDataChild::Payload(bytes),
             },
-        });
-        let parent = Arc::new(ParentData {
+        };
+        let parent = ParentData {
             bar: self.bar,
             baz: self.baz,
             foo: Enum16::A,
             child: ParentDataChild::Child(child),
-        });
+        };
         Child::new(parent).unwrap()
     }
 }
@@ -538,7 +537,7 @@
 #[derive(Debug, Clone, PartialEq, Eq)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub enum GrandChildDataChild {
-    GrandGrandChild(Arc<GrandGrandChildData>),
+    GrandGrandChild(GrandGrandChildData),
     Payload(Bytes),
     None,
 }
@@ -567,11 +566,11 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct GrandChild {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    parent: Arc<ParentData>,
+    parent: ParentData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    child: Arc<ChildData>,
+    child: ChildData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    grandchild: Arc<GrandChildData>,
+    grandchild: GrandChildData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -595,7 +594,7 @@
             (Enum16::A) if GrandGrandChildData::conforms(&payload) => {
                 let mut cell = Cell::new(payload);
                 let child_data = GrandGrandChildData::parse_inner(&mut cell)?;
-                GrandChildDataChild::GrandGrandChild(Arc::new(child_data))
+                GrandChildDataChild::GrandGrandChild(child_data)
             }
             _ if !payload.is_empty() => {
                 GrandChildDataChild::Payload(Bytes::copy_from_slice(payload))
@@ -662,7 +661,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = ParentData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> GrandChildChild {
         match &self.grandchild.child {
@@ -677,7 +676,7 @@
             GrandChildDataChild::None => GrandChildChild::None,
         }
     }
-    fn new(parent: Arc<ParentData>) -> Result<Self> {
+    fn new(parent: ParentData) -> Result<Self> {
         let child = match &parent.child {
             ParentDataChild::Child(value) => value.clone(),
             _ => {
@@ -699,16 +698,16 @@
         Ok(Self { parent, child, grandchild })
     }
     pub fn get_bar(&self) -> Enum16 {
-        self.parent.as_ref().bar
+        self.parent.bar
     }
     pub fn get_baz(&self) -> Enum16 {
-        self.parent.as_ref().baz
+        self.parent.baz
     }
     pub fn get_foo(&self) -> Enum16 {
-        self.parent.as_ref().foo
+        self.parent.foo
     }
     pub fn get_quux(&self) -> Enum16 {
-        self.child.as_ref().quux
+        self.child.quux
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.grandchild.write_to(buffer)
@@ -719,22 +718,22 @@
 }
 impl GrandChildBuilder {
     pub fn build(self) -> GrandChild {
-        let grandchild = Arc::new(GrandChildData {
+        let grandchild = GrandChildData {
             child: match self.payload {
                 None => GrandChildDataChild::None,
                 Some(bytes) => GrandChildDataChild::Payload(bytes),
             },
-        });
-        let child = Arc::new(ChildData {
+        };
+        let child = ChildData {
             quux: Enum16::A,
             child: ChildDataChild::GrandChild(grandchild),
-        });
-        let parent = Arc::new(ParentData {
+        };
+        let parent = ParentData {
             bar: Enum16::A,
             baz: self.baz,
             foo: Enum16::A,
             child: ParentDataChild::Child(child),
-        });
+        };
         GrandChild::new(parent).unwrap()
     }
 }
@@ -782,13 +781,13 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct GrandGrandChild {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    parent: Arc<ParentData>,
+    parent: ParentData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    child: Arc<ChildData>,
+    child: ChildData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    grandchild: Arc<GrandChildData>,
+    grandchild: GrandChildData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    grandgrandchild: Arc<GrandGrandChildData>,
+    grandgrandchild: GrandGrandChildData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -877,7 +876,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = ParentData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> GrandGrandChildChild {
         match &self.grandgrandchild.child {
@@ -887,7 +886,7 @@
             GrandGrandChildDataChild::None => GrandGrandChildChild::None,
         }
     }
-    fn new(parent: Arc<ParentData>) -> Result<Self> {
+    fn new(parent: ParentData) -> Result<Self> {
         let child = match &parent.child {
             ParentDataChild::Child(value) => value.clone(),
             _ => {
@@ -923,16 +922,16 @@
         })
     }
     pub fn get_bar(&self) -> Enum16 {
-        self.parent.as_ref().bar
+        self.parent.bar
     }
     pub fn get_baz(&self) -> Enum16 {
-        self.parent.as_ref().baz
+        self.parent.baz
     }
     pub fn get_foo(&self) -> Enum16 {
-        self.parent.as_ref().foo
+        self.parent.foo
     }
     pub fn get_quux(&self) -> Enum16 {
-        self.child.as_ref().quux
+        self.child.quux
     }
     pub fn get_payload(&self) -> &[u8] {
         match &self.grandgrandchild.child {
@@ -949,25 +948,25 @@
 }
 impl GrandGrandChildBuilder {
     pub fn build(self) -> GrandGrandChild {
-        let grandgrandchild = Arc::new(GrandGrandChildData {
+        let grandgrandchild = GrandGrandChildData {
             child: match self.payload {
                 None => GrandGrandChildDataChild::None,
                 Some(bytes) => GrandGrandChildDataChild::Payload(bytes),
             },
-        });
-        let grandchild = Arc::new(GrandChildData {
+        };
+        let grandchild = GrandChildData {
             child: GrandChildDataChild::GrandGrandChild(grandgrandchild),
-        });
-        let child = Arc::new(ChildData {
+        };
+        let child = ChildData {
             quux: Enum16::A,
             child: ChildDataChild::GrandChild(grandchild),
-        });
-        let parent = Arc::new(ParentData {
+        };
+        let parent = ParentData {
             bar: Enum16::A,
             baz: Enum16::A,
             foo: Enum16::A,
             child: ParentDataChild::Child(child),
-        });
+        };
         GrandGrandChild::new(parent).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_grand_children_little_endian.rs b/tests/generated/packet_decl_grand_children_little_endian.rs
index c223814..4a672a6 100644
--- a/tests/generated/packet_decl_grand_children_little_endian.rs
+++ b/tests/generated/packet_decl_grand_children_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -98,7 +97,7 @@
 #[derive(Debug, Clone, PartialEq, Eq)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub enum ParentDataChild {
-    Child(Arc<ChildData>),
+    Child(ChildData),
     Payload(Bytes),
     None,
 }
@@ -130,7 +129,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Parent {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    parent: Arc<ParentData>,
+    parent: ParentData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -213,7 +212,7 @@
             (Enum16::A) if ChildData::conforms(&payload) => {
                 let mut cell = Cell::new(payload);
                 let child_data = ChildData::parse_inner(&mut cell, bar, baz)?;
-                ParentDataChild::Child(Arc::new(child_data))
+                ParentDataChild::Child(child_data)
             }
             _ if !payload.is_empty() => {
                 ParentDataChild::Payload(Bytes::copy_from_slice(payload))
@@ -274,7 +273,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = ParentData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> ParentChild {
         match &self.parent.child {
@@ -285,17 +284,17 @@
             ParentDataChild::None => ParentChild::None,
         }
     }
-    fn new(parent: Arc<ParentData>) -> Result<Self> {
+    fn new(parent: ParentData) -> Result<Self> {
         Ok(Self { parent })
     }
     pub fn get_bar(&self) -> Enum16 {
-        self.parent.as_ref().bar
+        self.parent.bar
     }
     pub fn get_baz(&self) -> Enum16 {
-        self.parent.as_ref().baz
+        self.parent.baz
     }
     pub fn get_foo(&self) -> Enum16 {
-        self.parent.as_ref().foo
+        self.parent.foo
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.parent.write_to(buffer)
@@ -306,7 +305,7 @@
 }
 impl ParentBuilder {
     pub fn build(self) -> Parent {
-        let parent = Arc::new(ParentData {
+        let parent = ParentData {
             bar: self.bar,
             baz: self.baz,
             foo: self.foo,
@@ -314,7 +313,7 @@
                 None => ParentDataChild::None,
                 Some(bytes) => ParentDataChild::Payload(bytes),
             },
-        });
+        };
         Parent::new(parent).unwrap()
     }
 }
@@ -326,7 +325,7 @@
 #[derive(Debug, Clone, PartialEq, Eq)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub enum ChildDataChild {
-    GrandChild(Arc<GrandChildData>),
+    GrandChild(GrandChildData),
     Payload(Bytes),
     None,
 }
@@ -356,9 +355,9 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Child {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    parent: Arc<ParentData>,
+    parent: ParentData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    child: Arc<ChildData>,
+    child: ChildData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -402,7 +401,7 @@
             (Enum16::A, Enum16::A) if GrandChildData::conforms(&payload) => {
                 let mut cell = Cell::new(payload);
                 let child_data = GrandChildData::parse_inner(&mut cell, baz)?;
-                ChildDataChild::GrandChild(Arc::new(child_data))
+                ChildDataChild::GrandChild(child_data)
             }
             _ if !payload.is_empty() => {
                 ChildDataChild::Payload(Bytes::copy_from_slice(payload))
@@ -465,7 +464,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = ParentData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> ChildChild {
         match &self.child.child {
@@ -476,7 +475,7 @@
             ChildDataChild::None => ChildChild::None,
         }
     }
-    fn new(parent: Arc<ParentData>) -> Result<Self> {
+    fn new(parent: ParentData) -> Result<Self> {
         let child = match &parent.child {
             ParentDataChild::Child(value) => value.clone(),
             _ => {
@@ -489,16 +488,16 @@
         Ok(Self { parent, child })
     }
     pub fn get_bar(&self) -> Enum16 {
-        self.parent.as_ref().bar
+        self.parent.bar
     }
     pub fn get_baz(&self) -> Enum16 {
-        self.parent.as_ref().baz
+        self.parent.baz
     }
     pub fn get_foo(&self) -> Enum16 {
-        self.parent.as_ref().foo
+        self.parent.foo
     }
     pub fn get_quux(&self) -> Enum16 {
-        self.child.as_ref().quux
+        self.child.quux
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.child.write_to(buffer)
@@ -509,19 +508,19 @@
 }
 impl ChildBuilder {
     pub fn build(self) -> Child {
-        let child = Arc::new(ChildData {
+        let child = ChildData {
             quux: self.quux,
             child: match self.payload {
                 None => ChildDataChild::None,
                 Some(bytes) => ChildDataChild::Payload(bytes),
             },
-        });
-        let parent = Arc::new(ParentData {
+        };
+        let parent = ParentData {
             bar: self.bar,
             baz: self.baz,
             foo: Enum16::A,
             child: ParentDataChild::Child(child),
-        });
+        };
         Child::new(parent).unwrap()
     }
 }
@@ -538,7 +537,7 @@
 #[derive(Debug, Clone, PartialEq, Eq)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub enum GrandChildDataChild {
-    GrandGrandChild(Arc<GrandGrandChildData>),
+    GrandGrandChild(GrandGrandChildData),
     Payload(Bytes),
     None,
 }
@@ -567,11 +566,11 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct GrandChild {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    parent: Arc<ParentData>,
+    parent: ParentData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    child: Arc<ChildData>,
+    child: ChildData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    grandchild: Arc<GrandChildData>,
+    grandchild: GrandChildData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -595,7 +594,7 @@
             (Enum16::A) if GrandGrandChildData::conforms(&payload) => {
                 let mut cell = Cell::new(payload);
                 let child_data = GrandGrandChildData::parse_inner(&mut cell)?;
-                GrandChildDataChild::GrandGrandChild(Arc::new(child_data))
+                GrandChildDataChild::GrandGrandChild(child_data)
             }
             _ if !payload.is_empty() => {
                 GrandChildDataChild::Payload(Bytes::copy_from_slice(payload))
@@ -662,7 +661,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = ParentData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> GrandChildChild {
         match &self.grandchild.child {
@@ -677,7 +676,7 @@
             GrandChildDataChild::None => GrandChildChild::None,
         }
     }
-    fn new(parent: Arc<ParentData>) -> Result<Self> {
+    fn new(parent: ParentData) -> Result<Self> {
         let child = match &parent.child {
             ParentDataChild::Child(value) => value.clone(),
             _ => {
@@ -699,16 +698,16 @@
         Ok(Self { parent, child, grandchild })
     }
     pub fn get_bar(&self) -> Enum16 {
-        self.parent.as_ref().bar
+        self.parent.bar
     }
     pub fn get_baz(&self) -> Enum16 {
-        self.parent.as_ref().baz
+        self.parent.baz
     }
     pub fn get_foo(&self) -> Enum16 {
-        self.parent.as_ref().foo
+        self.parent.foo
     }
     pub fn get_quux(&self) -> Enum16 {
-        self.child.as_ref().quux
+        self.child.quux
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.grandchild.write_to(buffer)
@@ -719,22 +718,22 @@
 }
 impl GrandChildBuilder {
     pub fn build(self) -> GrandChild {
-        let grandchild = Arc::new(GrandChildData {
+        let grandchild = GrandChildData {
             child: match self.payload {
                 None => GrandChildDataChild::None,
                 Some(bytes) => GrandChildDataChild::Payload(bytes),
             },
-        });
-        let child = Arc::new(ChildData {
+        };
+        let child = ChildData {
             quux: Enum16::A,
             child: ChildDataChild::GrandChild(grandchild),
-        });
-        let parent = Arc::new(ParentData {
+        };
+        let parent = ParentData {
             bar: Enum16::A,
             baz: self.baz,
             foo: Enum16::A,
             child: ParentDataChild::Child(child),
-        });
+        };
         GrandChild::new(parent).unwrap()
     }
 }
@@ -782,13 +781,13 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct GrandGrandChild {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    parent: Arc<ParentData>,
+    parent: ParentData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    child: Arc<ChildData>,
+    child: ChildData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    grandchild: Arc<GrandChildData>,
+    grandchild: GrandChildData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    grandgrandchild: Arc<GrandGrandChildData>,
+    grandgrandchild: GrandGrandChildData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -877,7 +876,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = ParentData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> GrandGrandChildChild {
         match &self.grandgrandchild.child {
@@ -887,7 +886,7 @@
             GrandGrandChildDataChild::None => GrandGrandChildChild::None,
         }
     }
-    fn new(parent: Arc<ParentData>) -> Result<Self> {
+    fn new(parent: ParentData) -> Result<Self> {
         let child = match &parent.child {
             ParentDataChild::Child(value) => value.clone(),
             _ => {
@@ -923,16 +922,16 @@
         })
     }
     pub fn get_bar(&self) -> Enum16 {
-        self.parent.as_ref().bar
+        self.parent.bar
     }
     pub fn get_baz(&self) -> Enum16 {
-        self.parent.as_ref().baz
+        self.parent.baz
     }
     pub fn get_foo(&self) -> Enum16 {
-        self.parent.as_ref().foo
+        self.parent.foo
     }
     pub fn get_quux(&self) -> Enum16 {
-        self.child.as_ref().quux
+        self.child.quux
     }
     pub fn get_payload(&self) -> &[u8] {
         match &self.grandgrandchild.child {
@@ -949,25 +948,25 @@
 }
 impl GrandGrandChildBuilder {
     pub fn build(self) -> GrandGrandChild {
-        let grandgrandchild = Arc::new(GrandGrandChildData {
+        let grandgrandchild = GrandGrandChildData {
             child: match self.payload {
                 None => GrandGrandChildDataChild::None,
                 Some(bytes) => GrandGrandChildDataChild::Payload(bytes),
             },
-        });
-        let grandchild = Arc::new(GrandChildData {
+        };
+        let grandchild = GrandChildData {
             child: GrandChildDataChild::GrandGrandChild(grandgrandchild),
-        });
-        let child = Arc::new(ChildData {
+        };
+        let child = ChildData {
             quux: Enum16::A,
             child: ChildDataChild::GrandChild(grandchild),
-        });
-        let parent = Arc::new(ParentData {
+        };
+        let parent = ParentData {
             bar: Enum16::A,
             baz: Enum16::A,
             foo: Enum16::A,
             child: ParentDataChild::Child(child),
-        });
+        };
         GrandGrandChild::new(parent).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_mask_scalar_value_big_endian.rs b/tests/generated/packet_decl_mask_scalar_value_big_endian.rs
index 581542d..47f7a70 100644
--- a/tests/generated/packet_decl_mask_scalar_value_big_endian.rs
+++ b/tests/generated/packet_decl_mask_scalar_value_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -55,7 +54,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -135,19 +134,19 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_a(&self) -> u8 {
-        self.foo.as_ref().a
+        self.foo.a
     }
     pub fn get_b(&self) -> u32 {
-        self.foo.as_ref().b
+        self.foo.b
     }
     pub fn get_c(&self) -> u8 {
-        self.foo.as_ref().c
+        self.foo.c
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -158,11 +157,11 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {
+        let foo = FooData {
             a: self.a,
             b: self.b,
             c: self.c,
-        });
+        };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_mask_scalar_value_little_endian.rs b/tests/generated/packet_decl_mask_scalar_value_little_endian.rs
index 9bce70a..95f6c9d 100644
--- a/tests/generated/packet_decl_mask_scalar_value_little_endian.rs
+++ b/tests/generated/packet_decl_mask_scalar_value_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -55,7 +54,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -135,19 +134,19 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_a(&self) -> u8 {
-        self.foo.as_ref().a
+        self.foo.a
     }
     pub fn get_b(&self) -> u32 {
-        self.foo.as_ref().b
+        self.foo.b
     }
     pub fn get_c(&self) -> u8 {
-        self.foo.as_ref().c
+        self.foo.c
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -158,11 +157,11 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {
+        let foo = FooData {
             a: self.a,
             b: self.b,
             c: self.c,
-        });
+        };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_mixed_scalars_enums_big_endian.rs b/tests/generated/packet_decl_mixed_scalars_enums_big_endian.rs
index 87d0ecf..122b202 100644
--- a/tests/generated/packet_decl_mixed_scalars_enums_big_endian.rs
+++ b/tests/generated/packet_decl_mixed_scalars_enums_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -178,7 +177,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -270,22 +269,22 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_w(&self) -> u8 {
-        self.foo.as_ref().w
+        self.foo.w
     }
     pub fn get_x(&self) -> Enum7 {
-        self.foo.as_ref().x
+        self.foo.x
     }
     pub fn get_y(&self) -> u8 {
-        self.foo.as_ref().y
+        self.foo.y
     }
     pub fn get_z(&self) -> Enum9 {
-        self.foo.as_ref().z
+        self.foo.z
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -296,12 +295,12 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {
+        let foo = FooData {
             w: self.w,
             x: self.x,
             y: self.y,
             z: self.z,
-        });
+        };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_mixed_scalars_enums_little_endian.rs b/tests/generated/packet_decl_mixed_scalars_enums_little_endian.rs
index 85297cc..0cc3d92 100644
--- a/tests/generated/packet_decl_mixed_scalars_enums_little_endian.rs
+++ b/tests/generated/packet_decl_mixed_scalars_enums_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -178,7 +177,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -270,22 +269,22 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_w(&self) -> u8 {
-        self.foo.as_ref().w
+        self.foo.w
     }
     pub fn get_x(&self) -> Enum7 {
-        self.foo.as_ref().x
+        self.foo.x
     }
     pub fn get_y(&self) -> u8 {
-        self.foo.as_ref().y
+        self.foo.y
     }
     pub fn get_z(&self) -> Enum9 {
-        self.foo.as_ref().z
+        self.foo.z
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -296,12 +295,12 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {
+        let foo = FooData {
             w: self.w,
             x: self.x,
             y: self.y,
             z: self.z,
-        });
+        };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_parent_with_alias_child_big_endian.rs b/tests/generated/packet_decl_parent_with_alias_child_big_endian.rs
index a2c69a6..8c9232d 100644
--- a/tests/generated/packet_decl_parent_with_alias_child_big_endian.rs
+++ b/tests/generated/packet_decl_parent_with_alias_child_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -111,8 +110,8 @@
 #[derive(Debug, Clone, PartialEq, Eq)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub enum ParentDataChild {
-    AliasChild(Arc<AliasChildData>),
-    NormalChild(Arc<NormalChildData>),
+    AliasChild(AliasChildData),
+    NormalChild(NormalChildData),
     Payload(Bytes),
     None,
 }
@@ -144,7 +143,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Parent {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    parent: Arc<ParentData>,
+    parent: ParentData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -182,12 +181,12 @@
             (Enum8::B | Enum8::C) if AliasChildData::conforms(&payload) => {
                 let mut cell = Cell::new(payload);
                 let child_data = AliasChildData::parse_inner(&mut cell, v)?;
-                ParentDataChild::AliasChild(Arc::new(child_data))
+                ParentDataChild::AliasChild(child_data)
             }
             (Enum8::A) if NormalChildData::conforms(&payload) => {
                 let mut cell = Cell::new(payload);
                 let child_data = NormalChildData::parse_inner(&mut cell)?;
-                ParentDataChild::NormalChild(Arc::new(child_data))
+                ParentDataChild::NormalChild(child_data)
             }
             _ if !payload.is_empty() => {
                 ParentDataChild::Payload(Bytes::copy_from_slice(payload))
@@ -240,7 +239,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = ParentData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> ParentChild {
         match &self.parent.child {
@@ -254,11 +253,11 @@
             ParentDataChild::None => ParentChild::None,
         }
     }
-    fn new(parent: Arc<ParentData>) -> Result<Self> {
+    fn new(parent: ParentData) -> Result<Self> {
         Ok(Self { parent })
     }
     pub fn get_v(&self) -> Enum8 {
-        self.parent.as_ref().v
+        self.parent.v
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.parent.write_to(buffer)
@@ -269,13 +268,13 @@
 }
 impl ParentBuilder {
     pub fn build(self) -> Parent {
-        let parent = Arc::new(ParentData {
+        let parent = ParentData {
             v: self.v,
             child: match self.payload {
                 None => ParentDataChild::None,
                 Some(bytes) => ParentDataChild::Payload(bytes),
             },
-        });
+        };
         Parent::new(parent).unwrap()
     }
 }
@@ -287,8 +286,8 @@
 #[derive(Debug, Clone, PartialEq, Eq)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub enum AliasChildDataChild {
-    NormalGrandChild1(Arc<NormalGrandChild1Data>),
-    NormalGrandChild2(Arc<NormalGrandChild2Data>),
+    NormalGrandChild1(NormalGrandChild1Data),
+    NormalGrandChild2(NormalGrandChild2Data),
     Payload(Bytes),
     None,
 }
@@ -319,9 +318,9 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct AliasChild {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    parent: Arc<ParentData>,
+    parent: ParentData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    aliaschild: Arc<AliasChildData>,
+    aliaschild: AliasChildData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -345,12 +344,12 @@
             (Enum8::B) if NormalGrandChild1Data::conforms(&payload) => {
                 let mut cell = Cell::new(payload);
                 let child_data = NormalGrandChild1Data::parse_inner(&mut cell)?;
-                AliasChildDataChild::NormalGrandChild1(Arc::new(child_data))
+                AliasChildDataChild::NormalGrandChild1(child_data)
             }
             (Enum8::C) if NormalGrandChild2Data::conforms(&payload) => {
                 let mut cell = Cell::new(payload);
                 let child_data = NormalGrandChild2Data::parse_inner(&mut cell)?;
-                AliasChildDataChild::NormalGrandChild2(Arc::new(child_data))
+                AliasChildDataChild::NormalGrandChild2(child_data)
             }
             _ if !payload.is_empty() => {
                 AliasChildDataChild::Payload(Bytes::copy_from_slice(payload))
@@ -413,7 +412,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = ParentData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> AliasChildChild {
         match &self.aliaschild.child {
@@ -433,7 +432,7 @@
             AliasChildDataChild::None => AliasChildChild::None,
         }
     }
-    fn new(parent: Arc<ParentData>) -> Result<Self> {
+    fn new(parent: ParentData) -> Result<Self> {
         let aliaschild = match &parent.child {
             ParentDataChild::AliasChild(value) => value.clone(),
             _ => {
@@ -446,7 +445,7 @@
         Ok(Self { parent, aliaschild })
     }
     pub fn get_v(&self) -> Enum8 {
-        self.parent.as_ref().v
+        self.parent.v
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.aliaschild.write_to(buffer)
@@ -457,16 +456,16 @@
 }
 impl AliasChildBuilder {
     pub fn build(self) -> AliasChild {
-        let aliaschild = Arc::new(AliasChildData {
+        let aliaschild = AliasChildData {
             child: match self.payload {
                 None => AliasChildDataChild::None,
                 Some(bytes) => AliasChildDataChild::Payload(bytes),
             },
-        });
-        let parent = Arc::new(ParentData {
+        };
+        let parent = ParentData {
             v: self.v,
             child: ParentDataChild::AliasChild(aliaschild),
-        });
+        };
         AliasChild::new(parent).unwrap()
     }
 }
@@ -487,9 +486,9 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct NormalChild {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    parent: Arc<ParentData>,
+    parent: ParentData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    normalchild: Arc<NormalChildData>,
+    normalchild: NormalChildData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -553,9 +552,9 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = ParentData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(parent: Arc<ParentData>) -> Result<Self> {
+    fn new(parent: ParentData) -> Result<Self> {
         let normalchild = match &parent.child {
             ParentDataChild::NormalChild(value) => value.clone(),
             _ => {
@@ -568,7 +567,7 @@
         Ok(Self { parent, normalchild })
     }
     pub fn get_v(&self) -> Enum8 {
-        self.parent.as_ref().v
+        self.parent.v
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.normalchild.write_to(buffer)
@@ -579,11 +578,11 @@
 }
 impl NormalChildBuilder {
     pub fn build(self) -> NormalChild {
-        let normalchild = Arc::new(NormalChildData {});
-        let parent = Arc::new(ParentData {
+        let normalchild = NormalChildData {};
+        let parent = ParentData {
             v: Enum8::A,
             child: ParentDataChild::NormalChild(normalchild),
-        });
+        };
         NormalChild::new(parent).unwrap()
     }
 }
@@ -604,11 +603,11 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct NormalGrandChild1 {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    parent: Arc<ParentData>,
+    parent: ParentData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    aliaschild: Arc<AliasChildData>,
+    aliaschild: AliasChildData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    normalgrandchild1: Arc<NormalGrandChild1Data>,
+    normalgrandchild1: NormalGrandChild1Data,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -677,9 +676,9 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = ParentData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(parent: Arc<ParentData>) -> Result<Self> {
+    fn new(parent: ParentData) -> Result<Self> {
         let aliaschild = match &parent.child {
             ParentDataChild::AliasChild(value) => value.clone(),
             _ => {
@@ -705,7 +704,7 @@
         })
     }
     pub fn get_v(&self) -> Enum8 {
-        self.parent.as_ref().v
+        self.parent.v
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.normalgrandchild1.write_to(buffer)
@@ -716,14 +715,14 @@
 }
 impl NormalGrandChild1Builder {
     pub fn build(self) -> NormalGrandChild1 {
-        let normalgrandchild1 = Arc::new(NormalGrandChild1Data {});
-        let aliaschild = Arc::new(AliasChildData {
+        let normalgrandchild1 = NormalGrandChild1Data {};
+        let aliaschild = AliasChildData {
             child: AliasChildDataChild::NormalGrandChild1(normalgrandchild1),
-        });
-        let parent = Arc::new(ParentData {
+        };
+        let parent = ParentData {
             v: Enum8::B,
             child: ParentDataChild::AliasChild(aliaschild),
-        });
+        };
         NormalGrandChild1::new(parent).unwrap()
     }
 }
@@ -771,11 +770,11 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct NormalGrandChild2 {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    parent: Arc<ParentData>,
+    parent: ParentData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    aliaschild: Arc<AliasChildData>,
+    aliaschild: AliasChildData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    normalgrandchild2: Arc<NormalGrandChild2Data>,
+    normalgrandchild2: NormalGrandChild2Data,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -859,7 +858,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = ParentData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> NormalGrandChild2Child {
         match &self.normalgrandchild2.child {
@@ -869,7 +868,7 @@
             NormalGrandChild2DataChild::None => NormalGrandChild2Child::None,
         }
     }
-    fn new(parent: Arc<ParentData>) -> Result<Self> {
+    fn new(parent: ParentData) -> Result<Self> {
         let aliaschild = match &parent.child {
             ParentDataChild::AliasChild(value) => value.clone(),
             _ => {
@@ -895,7 +894,7 @@
         })
     }
     pub fn get_v(&self) -> Enum8 {
-        self.parent.as_ref().v
+        self.parent.v
     }
     pub fn get_payload(&self) -> &[u8] {
         match &self.normalgrandchild2.child {
@@ -912,19 +911,19 @@
 }
 impl NormalGrandChild2Builder {
     pub fn build(self) -> NormalGrandChild2 {
-        let normalgrandchild2 = Arc::new(NormalGrandChild2Data {
+        let normalgrandchild2 = NormalGrandChild2Data {
             child: match self.payload {
                 None => NormalGrandChild2DataChild::None,
                 Some(bytes) => NormalGrandChild2DataChild::Payload(bytes),
             },
-        });
-        let aliaschild = Arc::new(AliasChildData {
+        };
+        let aliaschild = AliasChildData {
             child: AliasChildDataChild::NormalGrandChild2(normalgrandchild2),
-        });
-        let parent = Arc::new(ParentData {
+        };
+        let parent = ParentData {
             v: Enum8::C,
             child: ParentDataChild::AliasChild(aliaschild),
-        });
+        };
         NormalGrandChild2::new(parent).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_parent_with_alias_child_little_endian.rs b/tests/generated/packet_decl_parent_with_alias_child_little_endian.rs
index a2c69a6..8c9232d 100644
--- a/tests/generated/packet_decl_parent_with_alias_child_little_endian.rs
+++ b/tests/generated/packet_decl_parent_with_alias_child_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -111,8 +110,8 @@
 #[derive(Debug, Clone, PartialEq, Eq)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub enum ParentDataChild {
-    AliasChild(Arc<AliasChildData>),
-    NormalChild(Arc<NormalChildData>),
+    AliasChild(AliasChildData),
+    NormalChild(NormalChildData),
     Payload(Bytes),
     None,
 }
@@ -144,7 +143,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Parent {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    parent: Arc<ParentData>,
+    parent: ParentData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -182,12 +181,12 @@
             (Enum8::B | Enum8::C) if AliasChildData::conforms(&payload) => {
                 let mut cell = Cell::new(payload);
                 let child_data = AliasChildData::parse_inner(&mut cell, v)?;
-                ParentDataChild::AliasChild(Arc::new(child_data))
+                ParentDataChild::AliasChild(child_data)
             }
             (Enum8::A) if NormalChildData::conforms(&payload) => {
                 let mut cell = Cell::new(payload);
                 let child_data = NormalChildData::parse_inner(&mut cell)?;
-                ParentDataChild::NormalChild(Arc::new(child_data))
+                ParentDataChild::NormalChild(child_data)
             }
             _ if !payload.is_empty() => {
                 ParentDataChild::Payload(Bytes::copy_from_slice(payload))
@@ -240,7 +239,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = ParentData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> ParentChild {
         match &self.parent.child {
@@ -254,11 +253,11 @@
             ParentDataChild::None => ParentChild::None,
         }
     }
-    fn new(parent: Arc<ParentData>) -> Result<Self> {
+    fn new(parent: ParentData) -> Result<Self> {
         Ok(Self { parent })
     }
     pub fn get_v(&self) -> Enum8 {
-        self.parent.as_ref().v
+        self.parent.v
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.parent.write_to(buffer)
@@ -269,13 +268,13 @@
 }
 impl ParentBuilder {
     pub fn build(self) -> Parent {
-        let parent = Arc::new(ParentData {
+        let parent = ParentData {
             v: self.v,
             child: match self.payload {
                 None => ParentDataChild::None,
                 Some(bytes) => ParentDataChild::Payload(bytes),
             },
-        });
+        };
         Parent::new(parent).unwrap()
     }
 }
@@ -287,8 +286,8 @@
 #[derive(Debug, Clone, PartialEq, Eq)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub enum AliasChildDataChild {
-    NormalGrandChild1(Arc<NormalGrandChild1Data>),
-    NormalGrandChild2(Arc<NormalGrandChild2Data>),
+    NormalGrandChild1(NormalGrandChild1Data),
+    NormalGrandChild2(NormalGrandChild2Data),
     Payload(Bytes),
     None,
 }
@@ -319,9 +318,9 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct AliasChild {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    parent: Arc<ParentData>,
+    parent: ParentData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    aliaschild: Arc<AliasChildData>,
+    aliaschild: AliasChildData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -345,12 +344,12 @@
             (Enum8::B) if NormalGrandChild1Data::conforms(&payload) => {
                 let mut cell = Cell::new(payload);
                 let child_data = NormalGrandChild1Data::parse_inner(&mut cell)?;
-                AliasChildDataChild::NormalGrandChild1(Arc::new(child_data))
+                AliasChildDataChild::NormalGrandChild1(child_data)
             }
             (Enum8::C) if NormalGrandChild2Data::conforms(&payload) => {
                 let mut cell = Cell::new(payload);
                 let child_data = NormalGrandChild2Data::parse_inner(&mut cell)?;
-                AliasChildDataChild::NormalGrandChild2(Arc::new(child_data))
+                AliasChildDataChild::NormalGrandChild2(child_data)
             }
             _ if !payload.is_empty() => {
                 AliasChildDataChild::Payload(Bytes::copy_from_slice(payload))
@@ -413,7 +412,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = ParentData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> AliasChildChild {
         match &self.aliaschild.child {
@@ -433,7 +432,7 @@
             AliasChildDataChild::None => AliasChildChild::None,
         }
     }
-    fn new(parent: Arc<ParentData>) -> Result<Self> {
+    fn new(parent: ParentData) -> Result<Self> {
         let aliaschild = match &parent.child {
             ParentDataChild::AliasChild(value) => value.clone(),
             _ => {
@@ -446,7 +445,7 @@
         Ok(Self { parent, aliaschild })
     }
     pub fn get_v(&self) -> Enum8 {
-        self.parent.as_ref().v
+        self.parent.v
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.aliaschild.write_to(buffer)
@@ -457,16 +456,16 @@
 }
 impl AliasChildBuilder {
     pub fn build(self) -> AliasChild {
-        let aliaschild = Arc::new(AliasChildData {
+        let aliaschild = AliasChildData {
             child: match self.payload {
                 None => AliasChildDataChild::None,
                 Some(bytes) => AliasChildDataChild::Payload(bytes),
             },
-        });
-        let parent = Arc::new(ParentData {
+        };
+        let parent = ParentData {
             v: self.v,
             child: ParentDataChild::AliasChild(aliaschild),
-        });
+        };
         AliasChild::new(parent).unwrap()
     }
 }
@@ -487,9 +486,9 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct NormalChild {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    parent: Arc<ParentData>,
+    parent: ParentData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    normalchild: Arc<NormalChildData>,
+    normalchild: NormalChildData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -553,9 +552,9 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = ParentData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(parent: Arc<ParentData>) -> Result<Self> {
+    fn new(parent: ParentData) -> Result<Self> {
         let normalchild = match &parent.child {
             ParentDataChild::NormalChild(value) => value.clone(),
             _ => {
@@ -568,7 +567,7 @@
         Ok(Self { parent, normalchild })
     }
     pub fn get_v(&self) -> Enum8 {
-        self.parent.as_ref().v
+        self.parent.v
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.normalchild.write_to(buffer)
@@ -579,11 +578,11 @@
 }
 impl NormalChildBuilder {
     pub fn build(self) -> NormalChild {
-        let normalchild = Arc::new(NormalChildData {});
-        let parent = Arc::new(ParentData {
+        let normalchild = NormalChildData {};
+        let parent = ParentData {
             v: Enum8::A,
             child: ParentDataChild::NormalChild(normalchild),
-        });
+        };
         NormalChild::new(parent).unwrap()
     }
 }
@@ -604,11 +603,11 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct NormalGrandChild1 {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    parent: Arc<ParentData>,
+    parent: ParentData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    aliaschild: Arc<AliasChildData>,
+    aliaschild: AliasChildData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    normalgrandchild1: Arc<NormalGrandChild1Data>,
+    normalgrandchild1: NormalGrandChild1Data,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -677,9 +676,9 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = ParentData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(parent: Arc<ParentData>) -> Result<Self> {
+    fn new(parent: ParentData) -> Result<Self> {
         let aliaschild = match &parent.child {
             ParentDataChild::AliasChild(value) => value.clone(),
             _ => {
@@ -705,7 +704,7 @@
         })
     }
     pub fn get_v(&self) -> Enum8 {
-        self.parent.as_ref().v
+        self.parent.v
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.normalgrandchild1.write_to(buffer)
@@ -716,14 +715,14 @@
 }
 impl NormalGrandChild1Builder {
     pub fn build(self) -> NormalGrandChild1 {
-        let normalgrandchild1 = Arc::new(NormalGrandChild1Data {});
-        let aliaschild = Arc::new(AliasChildData {
+        let normalgrandchild1 = NormalGrandChild1Data {};
+        let aliaschild = AliasChildData {
             child: AliasChildDataChild::NormalGrandChild1(normalgrandchild1),
-        });
-        let parent = Arc::new(ParentData {
+        };
+        let parent = ParentData {
             v: Enum8::B,
             child: ParentDataChild::AliasChild(aliaschild),
-        });
+        };
         NormalGrandChild1::new(parent).unwrap()
     }
 }
@@ -771,11 +770,11 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct NormalGrandChild2 {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    parent: Arc<ParentData>,
+    parent: ParentData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    aliaschild: Arc<AliasChildData>,
+    aliaschild: AliasChildData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    normalgrandchild2: Arc<NormalGrandChild2Data>,
+    normalgrandchild2: NormalGrandChild2Data,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -859,7 +858,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = ParentData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> NormalGrandChild2Child {
         match &self.normalgrandchild2.child {
@@ -869,7 +868,7 @@
             NormalGrandChild2DataChild::None => NormalGrandChild2Child::None,
         }
     }
-    fn new(parent: Arc<ParentData>) -> Result<Self> {
+    fn new(parent: ParentData) -> Result<Self> {
         let aliaschild = match &parent.child {
             ParentDataChild::AliasChild(value) => value.clone(),
             _ => {
@@ -895,7 +894,7 @@
         })
     }
     pub fn get_v(&self) -> Enum8 {
-        self.parent.as_ref().v
+        self.parent.v
     }
     pub fn get_payload(&self) -> &[u8] {
         match &self.normalgrandchild2.child {
@@ -912,19 +911,19 @@
 }
 impl NormalGrandChild2Builder {
     pub fn build(self) -> NormalGrandChild2 {
-        let normalgrandchild2 = Arc::new(NormalGrandChild2Data {
+        let normalgrandchild2 = NormalGrandChild2Data {
             child: match self.payload {
                 None => NormalGrandChild2DataChild::None,
                 Some(bytes) => NormalGrandChild2DataChild::Payload(bytes),
             },
-        });
-        let aliaschild = Arc::new(AliasChildData {
+        };
+        let aliaschild = AliasChildData {
             child: AliasChildDataChild::NormalGrandChild2(normalgrandchild2),
-        });
-        let parent = Arc::new(ParentData {
+        };
+        let parent = ParentData {
             v: Enum8::C,
             child: ParentDataChild::AliasChild(aliaschild),
-        });
+        };
         NormalGrandChild2::new(parent).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_parent_with_no_payload_big_endian.rs b/tests/generated/packet_decl_parent_with_no_payload_big_endian.rs
index 35c6dac..4f58e26 100644
--- a/tests/generated/packet_decl_parent_with_no_payload_big_endian.rs
+++ b/tests/generated/packet_decl_parent_with_no_payload_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -105,7 +104,7 @@
 #[derive(Debug, Clone, PartialEq, Eq)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub enum ParentDataChild {
-    Child(Arc<ChildData>),
+    Child(ChildData),
     Payload(Bytes),
     None,
 }
@@ -135,7 +134,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Parent {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    parent: Arc<ParentData>,
+    parent: ParentData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -172,7 +171,7 @@
             (Enum8::A) if ChildData::conforms(&payload) => {
                 let mut cell = Cell::new(payload);
                 let child_data = ChildData::parse_inner(&mut cell)?;
-                ParentDataChild::Child(Arc::new(child_data))
+                ParentDataChild::Child(child_data)
             }
             _ if !payload.is_empty() => {
                 ParentDataChild::Payload(Bytes::copy_from_slice(payload))
@@ -219,7 +218,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = ParentData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> ParentChild {
         match &self.parent.child {
@@ -230,11 +229,11 @@
             ParentDataChild::None => ParentChild::None,
         }
     }
-    fn new(parent: Arc<ParentData>) -> Result<Self> {
+    fn new(parent: ParentData) -> Result<Self> {
         Ok(Self { parent })
     }
     pub fn get_v(&self) -> Enum8 {
-        self.parent.as_ref().v
+        self.parent.v
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.parent.write_to(buffer)
@@ -245,10 +244,10 @@
 }
 impl ParentBuilder {
     pub fn build(self) -> Parent {
-        let parent = Arc::new(ParentData {
+        let parent = ParentData {
             v: self.v,
             child: ParentDataChild::None,
-        });
+        };
         Parent::new(parent).unwrap()
     }
 }
@@ -264,9 +263,9 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Child {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    parent: Arc<ParentData>,
+    parent: ParentData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    child: Arc<ChildData>,
+    child: ChildData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -330,9 +329,9 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = ParentData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(parent: Arc<ParentData>) -> Result<Self> {
+    fn new(parent: ParentData) -> Result<Self> {
         let child = match &parent.child {
             ParentDataChild::Child(value) => value.clone(),
             _ => {
@@ -345,7 +344,7 @@
         Ok(Self { parent, child })
     }
     pub fn get_v(&self) -> Enum8 {
-        self.parent.as_ref().v
+        self.parent.v
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.child.write_to(buffer)
@@ -356,11 +355,11 @@
 }
 impl ChildBuilder {
     pub fn build(self) -> Child {
-        let child = Arc::new(ChildData {});
-        let parent = Arc::new(ParentData {
+        let child = ChildData {};
+        let parent = ParentData {
             v: Enum8::A,
             child: ParentDataChild::None,
-        });
+        };
         Child::new(parent).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_parent_with_no_payload_little_endian.rs b/tests/generated/packet_decl_parent_with_no_payload_little_endian.rs
index 35c6dac..4f58e26 100644
--- a/tests/generated/packet_decl_parent_with_no_payload_little_endian.rs
+++ b/tests/generated/packet_decl_parent_with_no_payload_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -105,7 +104,7 @@
 #[derive(Debug, Clone, PartialEq, Eq)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub enum ParentDataChild {
-    Child(Arc<ChildData>),
+    Child(ChildData),
     Payload(Bytes),
     None,
 }
@@ -135,7 +134,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Parent {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    parent: Arc<ParentData>,
+    parent: ParentData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -172,7 +171,7 @@
             (Enum8::A) if ChildData::conforms(&payload) => {
                 let mut cell = Cell::new(payload);
                 let child_data = ChildData::parse_inner(&mut cell)?;
-                ParentDataChild::Child(Arc::new(child_data))
+                ParentDataChild::Child(child_data)
             }
             _ if !payload.is_empty() => {
                 ParentDataChild::Payload(Bytes::copy_from_slice(payload))
@@ -219,7 +218,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = ParentData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> ParentChild {
         match &self.parent.child {
@@ -230,11 +229,11 @@
             ParentDataChild::None => ParentChild::None,
         }
     }
-    fn new(parent: Arc<ParentData>) -> Result<Self> {
+    fn new(parent: ParentData) -> Result<Self> {
         Ok(Self { parent })
     }
     pub fn get_v(&self) -> Enum8 {
-        self.parent.as_ref().v
+        self.parent.v
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.parent.write_to(buffer)
@@ -245,10 +244,10 @@
 }
 impl ParentBuilder {
     pub fn build(self) -> Parent {
-        let parent = Arc::new(ParentData {
+        let parent = ParentData {
             v: self.v,
             child: ParentDataChild::None,
-        });
+        };
         Parent::new(parent).unwrap()
     }
 }
@@ -264,9 +263,9 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Child {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    parent: Arc<ParentData>,
+    parent: ParentData,
     #[cfg_attr(feature = "serde", serde(flatten))]
-    child: Arc<ChildData>,
+    child: ChildData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -330,9 +329,9 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = ParentData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(parent: Arc<ParentData>) -> Result<Self> {
+    fn new(parent: ParentData) -> Result<Self> {
         let child = match &parent.child {
             ParentDataChild::Child(value) => value.clone(),
             _ => {
@@ -345,7 +344,7 @@
         Ok(Self { parent, child })
     }
     pub fn get_v(&self) -> Enum8 {
-        self.parent.as_ref().v
+        self.parent.v
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.child.write_to(buffer)
@@ -356,11 +355,11 @@
 }
 impl ChildBuilder {
     pub fn build(self) -> Child {
-        let child = Arc::new(ChildData {});
-        let parent = Arc::new(ParentData {
+        let child = ChildData {};
+        let parent = ParentData {
             v: Enum8::A,
             child: ParentDataChild::None,
-        });
+        };
         Child::new(parent).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_payload_field_unknown_size_big_endian.rs b/tests/generated/packet_decl_payload_field_unknown_size_big_endian.rs
index 452c365..be55b05 100644
--- a/tests/generated/packet_decl_payload_field_unknown_size_big_endian.rs
+++ b/tests/generated/packet_decl_payload_field_unknown_size_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -74,7 +73,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -155,7 +154,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> FooChild {
         match &self.foo.child {
@@ -163,11 +162,11 @@
             FooDataChild::None => FooChild::None,
         }
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_a(&self) -> u32 {
-        self.foo.as_ref().a
+        self.foo.a
     }
     pub fn get_payload(&self) -> &[u8] {
         match &self.foo.child {
@@ -184,13 +183,13 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {
+        let foo = FooData {
             a: self.a,
             child: match self.payload {
                 None => FooDataChild::None,
                 Some(bytes) => FooDataChild::Payload(bytes),
             },
-        });
+        };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_payload_field_unknown_size_little_endian.rs b/tests/generated/packet_decl_payload_field_unknown_size_little_endian.rs
index 99c06b9..bc20979 100644
--- a/tests/generated/packet_decl_payload_field_unknown_size_little_endian.rs
+++ b/tests/generated/packet_decl_payload_field_unknown_size_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -74,7 +73,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -155,7 +154,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> FooChild {
         match &self.foo.child {
@@ -163,11 +162,11 @@
             FooDataChild::None => FooChild::None,
         }
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_a(&self) -> u32 {
-        self.foo.as_ref().a
+        self.foo.a
     }
     pub fn get_payload(&self) -> &[u8] {
         match &self.foo.child {
@@ -184,13 +183,13 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {
+        let foo = FooData {
             a: self.a,
             child: match self.payload {
                 None => FooDataChild::None,
                 Some(bytes) => FooDataChild::Payload(bytes),
             },
-        });
+        };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_payload_field_unknown_size_terminal_big_endian.rs b/tests/generated/packet_decl_payload_field_unknown_size_terminal_big_endian.rs
index f54477a..a8af260 100644
--- a/tests/generated/packet_decl_payload_field_unknown_size_terminal_big_endian.rs
+++ b/tests/generated/packet_decl_payload_field_unknown_size_terminal_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -74,7 +73,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -162,7 +161,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> FooChild {
         match &self.foo.child {
@@ -170,11 +169,11 @@
             FooDataChild::None => FooChild::None,
         }
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_a(&self) -> u32 {
-        self.foo.as_ref().a
+        self.foo.a
     }
     pub fn get_payload(&self) -> &[u8] {
         match &self.foo.child {
@@ -191,13 +190,13 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {
+        let foo = FooData {
             a: self.a,
             child: match self.payload {
                 None => FooDataChild::None,
                 Some(bytes) => FooDataChild::Payload(bytes),
             },
-        });
+        };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_payload_field_unknown_size_terminal_little_endian.rs b/tests/generated/packet_decl_payload_field_unknown_size_terminal_little_endian.rs
index 616c87f..c615757 100644
--- a/tests/generated/packet_decl_payload_field_unknown_size_terminal_little_endian.rs
+++ b/tests/generated/packet_decl_payload_field_unknown_size_terminal_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -74,7 +73,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -162,7 +161,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> FooChild {
         match &self.foo.child {
@@ -170,11 +169,11 @@
             FooDataChild::None => FooChild::None,
         }
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_a(&self) -> u32 {
-        self.foo.as_ref().a
+        self.foo.a
     }
     pub fn get_payload(&self) -> &[u8] {
         match &self.foo.child {
@@ -191,13 +190,13 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {
+        let foo = FooData {
             a: self.a,
             child: match self.payload {
                 None => FooDataChild::None,
                 Some(bytes) => FooDataChild::Payload(bytes),
             },
-        });
+        };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_payload_field_variable_size_big_endian.rs b/tests/generated/packet_decl_payload_field_variable_size_big_endian.rs
index fd2a3c1..ea6f7bf 100644
--- a/tests/generated/packet_decl_payload_field_variable_size_big_endian.rs
+++ b/tests/generated/packet_decl_payload_field_variable_size_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -75,7 +74,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -185,7 +184,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> FooChild {
         match &self.foo.child {
@@ -193,14 +192,14 @@
             FooDataChild::None => FooChild::None,
         }
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_a(&self) -> u8 {
-        self.foo.as_ref().a
+        self.foo.a
     }
     pub fn get_b(&self) -> u16 {
-        self.foo.as_ref().b
+        self.foo.b
     }
     pub fn get_payload(&self) -> &[u8] {
         match &self.foo.child {
@@ -217,14 +216,14 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {
+        let foo = FooData {
             a: self.a,
             b: self.b,
             child: match self.payload {
                 None => FooDataChild::None,
                 Some(bytes) => FooDataChild::Payload(bytes),
             },
-        });
+        };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_payload_field_variable_size_little_endian.rs b/tests/generated/packet_decl_payload_field_variable_size_little_endian.rs
index 65f1809..f2932f0 100644
--- a/tests/generated/packet_decl_payload_field_variable_size_little_endian.rs
+++ b/tests/generated/packet_decl_payload_field_variable_size_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -75,7 +74,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -185,7 +184,7 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
     pub fn specialize(&self) -> FooChild {
         match &self.foo.child {
@@ -193,14 +192,14 @@
             FooDataChild::None => FooChild::None,
         }
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_a(&self) -> u8 {
-        self.foo.as_ref().a
+        self.foo.a
     }
     pub fn get_b(&self) -> u16 {
-        self.foo.as_ref().b
+        self.foo.b
     }
     pub fn get_payload(&self) -> &[u8] {
         match &self.foo.child {
@@ -217,14 +216,14 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {
+        let foo = FooData {
             a: self.a,
             b: self.b,
             child: match self.payload {
                 None => FooDataChild::None,
                 Some(bytes) => FooDataChild::Payload(bytes),
             },
-        });
+        };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_reserved_field_big_endian.rs b/tests/generated/packet_decl_reserved_field_big_endian.rs
index f03c7bf..6d2a01e 100644
--- a/tests/generated/packet_decl_reserved_field_big_endian.rs
+++ b/tests/generated/packet_decl_reserved_field_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -51,7 +50,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -114,9 +113,9 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     fn write_to(&self, buffer: &mut BytesMut) {
@@ -128,7 +127,7 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {});
+        let foo = FooData {};
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_reserved_field_little_endian.rs b/tests/generated/packet_decl_reserved_field_little_endian.rs
index f03c7bf..6d2a01e 100644
--- a/tests/generated/packet_decl_reserved_field_little_endian.rs
+++ b/tests/generated/packet_decl_reserved_field_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -51,7 +50,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -114,9 +113,9 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     fn write_to(&self, buffer: &mut BytesMut) {
@@ -128,7 +127,7 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {});
+        let foo = FooData {};
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_simple_scalars_big_endian.rs b/tests/generated/packet_decl_simple_scalars_big_endian.rs
index 303a785..f2048d9 100644
--- a/tests/generated/packet_decl_simple_scalars_big_endian.rs
+++ b/tests/generated/packet_decl_simple_scalars_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -55,7 +54,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -143,19 +142,19 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_x(&self) -> u8 {
-        self.foo.as_ref().x
+        self.foo.x
     }
     pub fn get_y(&self) -> u16 {
-        self.foo.as_ref().y
+        self.foo.y
     }
     pub fn get_z(&self) -> u32 {
-        self.foo.as_ref().z
+        self.foo.z
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -166,11 +165,11 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {
+        let foo = FooData {
             x: self.x,
             y: self.y,
             z: self.z,
-        });
+        };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/packet_decl_simple_scalars_little_endian.rs b/tests/generated/packet_decl_simple_scalars_little_endian.rs
index 043a72f..16f01f7 100644
--- a/tests/generated/packet_decl_simple_scalars_little_endian.rs
+++ b/tests/generated/packet_decl_simple_scalars_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
@@ -55,7 +54,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub struct Foo {
     #[cfg_attr(feature = "serde", serde(flatten))]
-    foo: Arc<FooData>,
+    foo: FooData,
 }
 #[derive(Debug)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
@@ -143,19 +142,19 @@
     }
     fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
         let data = FooData::parse_inner(&mut bytes)?;
-        Self::new(Arc::new(data))
+        Self::new(data)
     }
-    fn new(foo: Arc<FooData>) -> Result<Self> {
+    fn new(foo: FooData) -> Result<Self> {
         Ok(Self { foo })
     }
     pub fn get_x(&self) -> u8 {
-        self.foo.as_ref().x
+        self.foo.x
     }
     pub fn get_y(&self) -> u16 {
-        self.foo.as_ref().y
+        self.foo.y
     }
     pub fn get_z(&self) -> u32 {
-        self.foo.as_ref().z
+        self.foo.z
     }
     fn write_to(&self, buffer: &mut BytesMut) {
         self.foo.write_to(buffer)
@@ -166,11 +165,11 @@
 }
 impl FooBuilder {
     pub fn build(self) -> Foo {
-        let foo = Arc::new(FooData {
+        let foo = FooData {
             x: self.x,
             y: self.y,
             z: self.z,
-        });
+        };
         Foo::new(foo).unwrap()
     }
 }
diff --git a/tests/generated/preamble.rs b/tests/generated/preamble.rs
index e200e6d..e3e9772 100644
--- a/tests/generated/preamble.rs
+++ b/tests/generated/preamble.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
diff --git a/tests/generated/struct_decl_complex_scalars_big_endian.rs b/tests/generated/struct_decl_complex_scalars_big_endian.rs
index 8ea2bb9..a8de9c9 100644
--- a/tests/generated/struct_decl_complex_scalars_big_endian.rs
+++ b/tests/generated/struct_decl_complex_scalars_big_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
diff --git a/tests/generated/struct_decl_complex_scalars_little_endian.rs b/tests/generated/struct_decl_complex_scalars_little_endian.rs
index 0ec2c38..e0741f7 100644
--- a/tests/generated/struct_decl_complex_scalars_little_endian.rs
+++ b/tests/generated/struct_decl_complex_scalars_little_endian.rs
@@ -4,7 +4,6 @@
 use std::convert::{TryFrom, TryInto};
 use std::cell::Cell;
 use std::fmt;
-use std::sync::Arc;
 use thiserror::Error;
 type Result<T> = std::result::Result<T, Error>;
 /// Private prevents users from creating arbitrary scalar values
