From 0ba2f84dbe44bc55b8a7cd028c53f5ad6bd58072 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Thu, 5 May 2022 14:09:38 +0100 Subject: [PATCH] W --- Cargo.lock | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 56 ++++++++++++------------------------ 2 files changed, 100 insertions(+), 38 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 26bf605..e816493 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -20,16 +20,92 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "darling" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4529658bdda7fd6769b8614be250cdcfc3aeb0ee72fe66f9e41e5e5eb73eac02" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "649c91bc01e8b1eac09fb91e8dbc7d517684ca6be8ebc75bb9cafc894f9fdb6f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddfc69c5bfcbd2fc09a0f38451d2daf0e372e367986a83906d1b0dbc88134fb5" +dependencies = [ + "darling_core", + "quote", + "syn", +] + +[[package]] +name = "derive_builder" +version = "0.11.2" +source = "git+https://github.com/ijackson/rust-derive-builder?rev=ba0c1a5311bd9f93ddf5f5b8ec2a5f6f03b22fbe#ba0c1a5311bd9f93ddf5f5b8ec2a5f6f03b22fbe" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.11.2" +source = "git+https://github.com/ijackson/rust-derive-builder?rev=4516209ce98f6506bf729aa7cdbced97747f7dd1#4516209ce98f6506bf729aa7cdbced97747f7dd1" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "derive_builder_macro" +version = "0.11.2" +source = "git+https://github.com/ijackson/rust-derive-builder?rev=a69d5eee830bddd5ff9b146b51e27580b1a7b6b0#a69d5eee830bddd5ff9b146b51e27580b1a7b6b0" +dependencies = [ + "derive_builder_core", + "syn", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "foo" version = "0.1.0" dependencies = [ + "derive_builder", "ron", "serde", "serde-value", "serde_json", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "itoa" version = "1.0.1" @@ -130,6 +206,12 @@ dependencies = [ "serde", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "syn" version = "1.0.92" diff --git a/src/main.rs b/src/main.rs index f1f0b2b..d5e3d21 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,48 +1,28 @@ -#[allow(dead_code)] -#[allow(unused_mut)] -#[allow(unused_imports)] +#![allow(dead_code)] +#![allow(unused_mut)] +#![allow(unused_imports)] -use serde::{Serialize, Deserialize}; - -#[derive(Serialize, Deserialize, Debug, Copy, Clone)] -struct Place { - name: usize, -} +use derive_builder::Builder; +use std::io; -#[derive(Serialize, Deserialize, Debug, Copy, Clone)] -struct Output { - place: Place, - ino: char, -} +use serde::{Serialize, Deserialize}; -#[derive(Serialize, Deserialize, Debug, Copy, Clone)] -struct Flattened { - #[serde(flatten)] - place: Place, - inf: char, +#[derive(Builder,Debug)] +#[builder(derive(Debug))] +struct Contains { + #[builder(sub_builder)] + things: Vec, } -#[derive(Serialize, Deserialize, Debug, Copy, Clone)] -struct ManuallyFlattened { - name: usize, - inm: char, -} +#[derive(Debug,Default,Clone)] +struct VecBuilder(Option>); -fn p(n: &str, v: &T) { - println!("\n{}", n); - println!("value {:?}", serde_value::to_value(&v)); - println!("ron {}", ron::to_string(&v).unwrap()); - println!("json {}", serde_json::to_string(&v).unwrap()); - println!(); +impl VecBuilder { + fn build(&self) -> Result, io::Error> { Ok(vec![]) } } fn main() { - let place = Place { name: 42 }; - let o = Output { place, ino: 'o' }; - let f = Flattened { place, inf: 'f' }; - let m = ManuallyFlattened { name: 42, inm: 'm' }; - - p("O", &o); - p("F", &f); - p("M", &m); + let cb = ContainsBuilder::default(); + let c = cb.build(); + println!("cb={cb:?} c={c:?}"); } -- 2.30.2