#zerocopy #serialization #const #proc

databake

Trait that lets structs represent themselves as (const) Rust expressions

3 releases

0.1.2 Aug 4, 2022
0.1.1 Jul 11, 2022
0.1.0 Jun 28, 2022

#116 in Procedural macros

Download history 16/week @ 2022-06-24 7/week @ 2022-07-01 23/week @ 2022-07-08 15/week @ 2022-07-15 9/week @ 2022-07-22 14/week @ 2022-07-29 59/week @ 2022-08-05 106/week @ 2022-08-12 115/week @ 2022-08-19 63/week @ 2022-08-26 96/week @ 2022-09-02 101/week @ 2022-09-09 78/week @ 2022-09-16 49/week @ 2022-09-23

340 downloads per month
Used in 24 crates (21 directly)

Unicode-DFS-2016

16KB
295 lines

databake crates.io

This crate allows data to write itself into Rust code (bake itself in).

Types that implement the Bake trait can be written into Rust expressions, which allows using Rust code itself as a zero-overhead "serialization" strategy.

Example

use databake::*;
use alloc::borrow::Cow;

let data = [Some((18, Cow::Borrowed("hi")))];
assert_eq!(
    data.bake(&Default::default()).to_string(),
    r#"[Some ((18i32 , alloc :: borrow :: Cow :: Borrowed ("hi") ,)) ,]"#,
);

Derive

Bake can be automatically derived if the derive feature is enabled.

use databake::*;

#[derive(Bake)]
#[databake(path = my_crate)]
struct MyStruct {
  number: u32,
  string: &'static str,
  slice: &'static [bool],
}

#[derive(Bake)]
#[databake(path = my_crate)]
struct AnotherOne(MyStruct, char);

Testing

The [test_bake] macro can be uses to assert that a particular expression is a Bake fixed point.

## use databake::*;
## #[derive(Bake)]
## #[databake(path = my_crate)]
## struct MyStruct {
##   number: u32,
##   string: &'static str,
##   slice: &'static [bool],
## }
##
## #[derive(Bake)]
## #[databake(path = my_crate)]
## struct AnotherOne(MyStruct, char);
## fn main() {
test_bake!(
    AnotherOne,
    const: crate::AnotherOne(
        crate::MyStruct {
          number: 17u32,
          string: "foo",
          slice: &[true, false],
        },
        'b',
    ),
    my_crate,
);
## }
```rust

## More Information

For more information on development, authorship, contributing etc. please visit [`ICU4X home page`](https://github.com/unicode-org/icu4x).

Dependencies

~220–650KB
~15K SLoC