Skip to content

Commit

Permalink
feat: introduce sizing methods to calculate needed bytes
Browse files Browse the repository at this point in the history
Each struct and enum in a schema can now calculate its total encoded
byte size. As each collection must be iterated it can be a costly
operation but it might be faster (or sometimes even required) to
allocate a buffer upfront instead of dynamically growing it.
  • Loading branch information
dnaka91 committed Dec 6, 2023
1 parent c44888a commit ab8f4f7
Show file tree
Hide file tree
Showing 38 changed files with 1,385 additions and 42 deletions.
10 changes: 7 additions & 3 deletions crates/stef-build/src/definition.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use stef_parser::{
Module, NamedField, Schema, Struct, Type, TypeAlias, UnnamedField, Variant,
};

use super::{decode, encode};
use super::{decode, encode, size};
use crate::{BytesType, Opts};

#[must_use]
Expand All @@ -14,7 +14,7 @@ pub fn compile_schema(opts: &Opts, Schema { definitions, .. }: &Schema<'_>) -> T

quote! {
#[allow(unused_imports)]
use ::stef::buf::{Decode, Encode};
use ::stef::buf::{Decode, Encode, Size};

#(#definitions)*
}
Expand All @@ -27,22 +27,26 @@ fn compile_definition(opts: &Opts, definition: &Definition<'_>) -> TokenStream {
let def = compile_struct(opts, s);
let encode = encode::compile_struct(opts, s);
let decode = decode::compile_struct(opts, s);
let size = size::compile_struct(opts, s);

quote! {
#def
#encode
#decode
#size
}
}
Definition::Enum(e) => {
let def = compile_enum(opts, e);
let encode = encode::compile_enum(opts, e);
let decode = decode::compile_enum(opts, e);
let size = size::compile_enum(opts, e);

quote! {
#def
#encode
#decode
#size
}
}
Definition::TypeAlias(a) => compile_alias(opts, a),
Expand All @@ -67,7 +71,7 @@ fn compile_module(
#comment
pub mod #name {
#[allow(unused_imports)]
use ::stef::buf::{Decode, Encode};
use ::stef::buf::{Decode, Encode, Size};

#(#definitions)*
}
Expand Down
1 change: 1 addition & 0 deletions crates/stef-build/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ pub use self::definition::compile_schema;
mod decode;
mod definition;
mod encode;
mod size;

pub type Result<T, E = Error> = std::result::Result<T, E>;

Expand Down
Loading

0 comments on commit ab8f4f7

Please sign in to comment.