Skip to content

generate traits like FromGlueSqlRow to enable basic ORM functionality

License

Notifications You must be signed in to change notification settings

JakkuSakura/gluesql-derive

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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);
}

About

generate traits like FromGlueSqlRow to enable basic ORM functionality

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages