doido-model 0.0.13

SeaORM re-exports plus connection pooling and model testing helpers for Doido apps.
Documentation
use doido_model::serialization::{
    as_json_except, as_json_only, deserialize_column, serialize_column,
};
use serde::{Deserialize, Serialize};

#[derive(Serialize)]
struct User {
    id: i32,
    name: String,
    password_digest: String,
}

#[test]
fn as_json_except_hides_keys() {
    let u = User {
        id: 1,
        name: "Ada".into(),
        password_digest: "secret".into(),
    };
    let j = as_json_except(&u, &["password_digest"]);
    assert!(j.get("password_digest").is_none(), "sensitive key removed");
    assert_eq!(j["name"], "Ada");
    assert_eq!(j["id"], 1);
}

#[test]
fn as_json_only_keeps_listed_keys() {
    let u = User {
        id: 1,
        name: "Ada".into(),
        password_digest: "secret".into(),
    };
    let j = as_json_only(&u, &["id", "name"]);
    assert_eq!(j.as_object().unwrap().len(), 2);
    assert_eq!(j["id"], 1);
}

#[derive(Serialize, Deserialize, PartialEq, Debug)]
struct Prefs {
    theme: String,
    notify: bool,
}

#[test]
fn serialized_column_round_trips() {
    let prefs = Prefs {
        theme: "dark".into(),
        notify: true,
    };
    let stored = serialize_column(&prefs).unwrap();
    let loaded: Prefs = deserialize_column(&stored).unwrap();
    assert_eq!(loaded, prefs);
}