5 releases

0.1.6 Jun 15, 2024
0.1.5 Oct 8, 2023
0.1.3 Sep 13, 2023
0.1.2 Aug 31, 2023

#1047 in Network programming

Download history 26/week @ 2024-07-27 6/week @ 2024-09-21

350 downloads per month

MIT license

27KB
555 lines

deta.rs

Rust bindings for the Deta Base and Drive HTTP API

Installation

cargo add detalib

Quickstart

use detalib::{ Deta, Operation, Operator };
use serde::{ Deserialize, Serialize };
use serde_json::{ Number, Value };


#[derive(Serialize, Deserialize)]
struct User {
    key: String,
    name: String,
    age: u8,
}

fn main() {
    let deta = Deta::new("project_key");
    let base = deta.base("base_name");
    let drive = deta.drive("drive_name");
    
    let user = User {
        key: "user_1".to_string(),
        name: "John".to_string(),
        age: 20,
    };

    ///////////////////////////////////
    //          BASE Methods        //
    //////////////////////////////////
    
    // Insert a record
    _ = base.insert(&user).unwrap();

    // Put multiple records
    let users = vec![
        User {
            key: "user_1".to_string(),
            name: "John".to_string(),
            age: 20,
        },
        User {
            key: "user_2".to_string(),
            name: "Jane".to_string(),
            age: 21,
        },
    ];
    _ = base.put(&users).unwrap();
    
    // Get a single record
    let user = base.get("user_1").unwrap();
    println!("{:?}", user);
    
    // Get in deserialized format
    let user_d = base.get_as::<User>("user_1").unwrap();
    println!("{:?}", user_d);

    // Delete a record
    _ = base.delete("user_1").unwrap();

    // Update a record
    _ = base.update("user_1")
        .set("name", Value::String("Johnny".to_string()))
        .increment("age", Value::Number(Number::from(1)))
        .commit()
        .unwrap();

    // Query records
    let resp = base.query()
        .limit(1)
        .sort(true)
        .equals("name", Value::String("Johnny".to_string()))
        .greater_than("age", Value::Number(Number::from(20)))
        .less_than("age", Value::Number(Number::from(23)))
        .run()
        .unwrap();
    println!("{:?}", resp);

    // Query all records
    let resp = base.query().run_until_end().unwrap();
    println!("{:?}", resp);
    

    /////////////////////////////////
    //        Drive Methods       //
    ////////////////////////////////
    
    // Put a file
    _ = drive.put("hello.txt", "Hello World".as_bytes(), Some("text/plain")).unwrap();

    // Delete a file
    _ = drive.delete(vec!["hello.txt"]).unwrap();

    // Get a file
    let resp = drive.get("hello.txt").unwrap();
    // read the response body as bytes and do something with it

    // List files up to 10, default is 1000
    let value = drive.list(None, 10, None).unwrap();
    println!("{:?}", value);

    // List all files
    let value = drive.list_all(None).unwrap();
    println!("{:?}", value);
    
}


Base

Methods

  • put (batch max 25)
  • get (single)
  • insert (single)
  • delete (single)
  • update (with upsert)
  • query (paginated)

Drive

Methods

  • put (single)
  • get (single)
  • delete (single)
  • list (paginated)
  • walk (multiple)

Dependencies

~11–20MB
~370K SLoC