baker 0.2.0

Derive macro for creating intermediate structs.
Documentation
use baker::Bake;

#[test]
fn test() {
  #[derive(Bake, Clone)]
  #[baked(name = "Baked", derive(std::fmt::Debug))]
  struct Test {
    #[baked(ignore)]
    pub _ignored: (),
    #[baked(type = "String", map_fn(bake = "|u| u.new_type.first().unwrap().to_owned()", view = "|u| u.new_type.first().unwrap()"))]
    pub new_type: Vec<String>,
    #[baked(rename = "name")]
    pub field: String,
  }

  let test = Test {
    _ignored: (),
    new_type: vec!["1".to_string(), "2".to_string()],
    field: "test".to_string(),
  };

  let baked = test.clone().bake();

  assert_eq!(test.new_type.first().unwrap().to_owned(), baked.new_type);
  assert_eq!(test.field, baked.name);

  format!("{:?}", baked);

  let viewed = test.view();

  assert_eq!(test.new_type.first().unwrap(), viewed.new_type);
  assert_eq!(&test.field, viewed.name);

  format!("{:?}", baked);
}

#[test]
fn fail() {
  #[derive(Bake, Clone)]
  #[baked(name = "Baked", error_type = "String")]
  struct Test {
    #[baked(type = "String", map_fn(try_bake = "|_u| Err(\"failed\".to_string())", try_view = "|_u| Err(\"failed\".to_string())"))]
    pub _new_type: Vec<String>,
    pub _field: String,
  }

  let test = Test {
    _new_type: vec!["1".to_string(), "2".to_string()],
    _field: "test".to_string(),
  };

  if let Err(err) = test.clone().bake() {
    assert_eq!(err, "failed".to_string());
  } else {
    panic!("bake() should have failed");
  }

  if let Err(err) = test.view() {
    assert_eq!(err, "failed".to_string());
  } else {
    panic!("view() should have failed");
  }
}