gluesql-derive

Crates.iogluesql-derive
lib.rsgluesql-derive
version0.2.5
sourcesrc
created_at2024-01-23 11:54:37.198123
updated_at2024-04-27 16:46:04.089991
descriptionDerive traits for GlueSQL
homepage
repositoryhttps://github.com/JakkuSakura/gluesql-derive
max_upload_size
id1110744
size26,349
Jakku Sakura (JakkuSakura)

documentation

README

gluesql-derive

generate traits like ReflectGlueSqlRow, FromGlueSqlRow, ToGlueSqlRow to enable basic ORM functionality

Example

#[test]
fn test_reflectgluesql_field_struct() {
    #[allow(unused)]
    #[derive(ReflectGlueSqlRow)]
    struct Foo {
        a: i64,
        b: bool,
        c: String,
        d: Option<i64>,
    }
    assert_eq!(Foo::columns(), vec!["a", "b", "c", "d"]);
}

#[test]
fn test_fromgluesql_field_struct() {
    #[derive(FromGlueSqlRow)]
    struct Foo {
        a: i64,
        b: bool,
        c: String,
        d: Option<i64>,
    }
    let data = Foo::from_gluesql_row(
        &[
            "a".to_string(),
            "b".to_string(),
            "c".to_string(),
            "d".to_string(),
        ],
        vec![
            Value::I64(1),
            Value::Bool(true),
            Value::Str("hello".to_string()),
            Value::Null,
        ],
    )
        .unwrap();
    assert_eq!(data.a, 1);
    assert_eq!(data.b, true);
    assert_eq!(data.c, "hello");
    assert_eq!(data.d, None);
}

#[test]
fn test_togluesql_field_struct() {
    #[derive(ToGlueSqlRow)]
    struct Foo {
        a: i64,
        b: bool,
        c: String,
        d: Option<i64>,
        e: rust_decimal::Decimal,
    }
    let data = Foo {
        a: 1,
        b: true,
        c: "hello".to_string(),
        d: None,
        e: rust_decimal::Decimal::from_str("1.23").unwrap(),
    };
    let row = data.to_gluesql_row();
    println!("{:?}", row);
}

Commit count: 24

cargo fmt