Skip to content

Commit

Permalink
support no_std for tls_codec_derive
Browse files Browse the repository at this point in the history
  • Loading branch information
imor committed Jul 2, 2023
1 parent 9c745bd commit fb4b494
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 2 deletions.
2 changes: 1 addition & 1 deletion tls_codec/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ arbitrary = [ "std", "dep:arbitrary" ]
derive = [ "std", "tls_codec_derive" ]
serde = [ "std", "dep:serde" ]
mls = [] # In MLS variable length vectors are limited compared to QUIC.
std = []
std = [ "tls_codec_derive?/std" ]

[[bench]]
name = "tls_vec"
Expand Down
4 changes: 4 additions & 0 deletions tls_codec/derive/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,7 @@ proc-macro2 = "1.0"
[dev-dependencies]
tls_codec = { path = "../" }
trybuild = "1"

[features]
default = [ "std" ]
std = []
8 changes: 7 additions & 1 deletion tls_codec/derive/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -698,7 +698,7 @@ fn impl_tls_size(parsed_ast: TlsStruct) -> TokenStream2 {
let field_len = match self {
#(#field_arms)*
};
std::mem::size_of::<#repr>() + field_len
core::mem::size_of::<#repr>() + field_len
}
}

Expand Down Expand Up @@ -740,6 +740,7 @@ fn impl_serialize(parsed_ast: TlsStruct, svariant: SerializeVariant) -> TokenStr
SerializeVariant::Write => {
quote! {
impl #impl_generics tls_codec::Serialize for #ident #ty_generics #where_clause {
#[cfg(feature = "std")]
fn tls_serialize<W: std::io::Write>(&self, writer: &mut W) -> core::result::Result<usize, tls_codec::Error> {
let mut written = 0usize;
#(
Expand All @@ -760,6 +761,7 @@ fn impl_serialize(parsed_ast: TlsStruct, svariant: SerializeVariant) -> TokenStr
}

impl #impl_generics tls_codec::Serialize for &#ident #ty_generics #where_clause {
#[cfg(feature = "std")]
fn tls_serialize<W: std::io::Write>(&self, writer: &mut W) -> core::result::Result<usize, tls_codec::Error> {
tls_codec::Serialize::tls_serialize(*self, writer)
}
Expand Down Expand Up @@ -850,6 +852,7 @@ fn impl_serialize(parsed_ast: TlsStruct, svariant: SerializeVariant) -> TokenStr
SerializeVariant::Write => {
quote! {
impl #impl_generics tls_codec::Serialize for #ident #ty_generics #where_clause {
#[cfg(feature = "std")]
fn tls_serialize<W: std::io::Write>(&self, writer: &mut W) -> core::result::Result<usize, tls_codec::Error> {
#discriminant_constants
match self {
Expand All @@ -859,6 +862,7 @@ fn impl_serialize(parsed_ast: TlsStruct, svariant: SerializeVariant) -> TokenStr
}

impl #impl_generics tls_codec::Serialize for &#ident #ty_generics #where_clause {
#[cfg(feature = "std")]
fn tls_serialize<W: std::io::Write>(&self, writer: &mut W) -> core::result::Result<usize, tls_codec::Error> {
tls_codec::Serialize::tls_serialize(*self, writer)
}
Expand Down Expand Up @@ -909,6 +913,7 @@ fn impl_deserialize(parsed_ast: TlsStruct) -> TokenStream2 {
let (impl_generics, ty_generics, where_clause) = generics.split_for_impl();
quote! {
impl #impl_generics tls_codec::Deserialize for #ident #ty_generics #where_clause {
#[cfg(feature = "std")]
fn tls_deserialize<R: std::io::Read>(bytes: &mut R) -> core::result::Result<Self, tls_codec::Error> {
Ok(Self {
#(#members: #prefixes::tls_deserialize(bytes)?,)*
Expand Down Expand Up @@ -948,6 +953,7 @@ fn impl_deserialize(parsed_ast: TlsStruct) -> TokenStream2 {
quote! {
impl #impl_generics tls_codec::Deserialize for #ident #ty_generics #where_clause {
#[allow(non_upper_case_globals)]
#[cfg(feature = "std")]
fn tls_deserialize<R: std::io::Read>(bytes: &mut R) -> core::result::Result<Self, tls_codec::Error> {
#discriminant_constants
let discriminant = <#repr as tls_codec::Deserialize>::tls_deserialize(bytes)?;
Expand Down

0 comments on commit fb4b494

Please sign in to comment.