prisma-rust-schema 0.2.1

A Rust binary to act as a Prisma generator, generating Rust code from Prisma schema files.
Documentation
mod schema;
use bson::oid::ObjectId;
use schema::*;
use serde_json::json;

#[test]
fn user_model() {
    let user_json = json!({
        "_id": {
            "$oid": "507f1f77bcf86cd799439011"
        },
        "email": "test@test.com",
        "name": "John Doe",
        "permission": "USER",
        "createdAt": 1234567890,
        "status": {
            "active": true,
            "lastLogin": 1234567890,
        },
        "badCase": [],
        "posts": []
    });

    let user: User = serde_json::from_value(user_json).unwrap();
    assert_eq!(
        user.id,
        ObjectId::parse_str("507f1f77bcf86cd799439011").unwrap()
    );
    assert_eq!(user.email, "test@test.com".to_string());
    assert_eq!(
        user.username,
        Some("John Doe".to_string()),
        "name is renamed to username"
    );
    assert_eq!(user.permission, Permission::USER);
    assert_eq!(user.created_at, 1234567890usize);
    assert_eq!(
        user.status,
        json!({"active": true, "lastLogin": 1234567890})
    );
    assert_eq!(user.bad_case, vec![]);
    assert_eq!(user.posts, vec![]);
}

#[test]
fn post_model() {
    let post_json = json!({
        "_id": {
            "$oid": "507f1f77bcf86cd799439011"
        },
        "content": {
            "text": "Hello world",
            "images": [
                "https://example.com/image1.jpg",
                "https://example.com/image2.jpg"
            ]
        },
        "authorId": {
            "$oid": "507f1f77bcf86cd799439012"
        }
    });

    let post: Post = serde_json::from_value(post_json).unwrap();
    assert_eq!(
        post.id,
        ObjectId::parse_str("507f1f77bcf86cd799439011").unwrap()
    );
    assert_eq!(post.content.text, "Hello world".to_string());
    assert_eq!(
        post.content.images,
        vec![
            "https://example.com/image1.jpg".to_string(),
            "https://example.com/image2.jpg".to_string()
        ]
    );
    assert_eq!(
        post.author_id,
        ObjectId::parse_str("507f1f77bcf86cd799439012").unwrap()
    );
}

#[test]
fn bad_case_model() {
    let bad_case_json = json!({
        "_id": {
            "$oid": "507f1f77bcf86cd799439011"
        },
        "userId": {
            "$oid": "507f1f77bcf86cd799439012"
        }
    });

    let bad_case: BadCase = serde_json::from_value(bad_case_json).unwrap();
    assert_eq!(
        bad_case.id,
        ObjectId::parse_str("507f1f77bcf86cd799439011").unwrap()
    );
    assert_eq!(
        bad_case.user_id,
        ObjectId::parse_str("507f1f77bcf86cd799439012").unwrap()
    );
}

#[test]
fn content_model() {
    let content_json = json!({
        "text": "Hello world",
        "images": [
            "https://example.com/image1.jpg",
            "https://example.com/image2.jpg"
        ]
    });

    let content: Content = serde_json::from_value(content_json).unwrap();
    assert_eq!(content.text, "Hello world".to_string());
    assert_eq!(
        content.images,
        vec![
            "https://example.com/image1.jpg".to_string(),
            "https://example.com/image2.jpg".to_string()
        ]
    );
}

#[test]
fn permission_model() {
    let user_permission = Permission::USER;
    let admin_permission = Permission::ADMIN;

    assert_eq!(user_permission, Permission::USER);
    assert_eq!(admin_permission, Permission::ADMIN);
}