2个版本

0.1.1 2020年6月24日
0.1.0 2020年6月24日

#3 in #ignite

MIT/Apache

11KB
158

Apache Ignite 薄客户端

用法

[dependencies]
ignite-rs = "0.1.0"
fn main() {
    // Create a client configuration
    let mut client_config = ClientConfig::new("localhost:10800");

    // Optionally define user, password, TCP configuration
    // client_config.username = Some("ignite".into());
    // client_config.password = Some("ignite".into());

    // Create an actual client. The protocol handshake is done here
    let mut ignite = ignite_rs::new_client(client_config).unwrap();

    // Get a list of present caches
    if let Ok(names) = ignite.get_cache_names() {
        println!("ALL caches: {:?}", names)
    }

    // Create a typed cache named "test"
    let hello_cache: Cache<MyType, MyOtherType> = ignite
        .get_or_create_cache::<MyType, MyOtherType>("test")
        .unwrap();

    let key = MyType {
        bar: "AAAAA".into(),
        foo: 999,
    };
    let val = MyOtherType {
        list: vec![Some(FooBar {})],
        arr: vec![-23423423i64, -2342343242315i64],
    };

    // Put value
    hello_cache.put(&key, &val).unwrap();

    // Retrieve value
    println!("{:?}", hello_cache.get(&key).unwrap());
}

// Define your structs, that could be used as keys or values
#[derive(IgniteObj, Clone, Debug)]
struct MyType {
    bar: String,
    foo: i32,
}

#[derive(IgniteObj, Clone, Debug)]
struct MyOtherType {
    list: Vec<Option<FooBar>>,
    arr: Vec<i64>,
}

#[derive(IgniteObj, Clone, Debug)]
struct FooBar {}

类型映射

以下是支持的Rust类型及其对应的Ignite类型和类型代码(https://apacheignite.readme.io/docs/binary-client-protocol-data-format

Rust类型 Ignite类型 Ignite类型代码
u8 字节 1
u16 字符 7
i16 短整型 2
i32 整型 3
i64 长整型 4
f32 单精度浮点数 5
f64 双精度浮点数 6
bool 布尔型 8
ignite_rs::Enum 枚举 28
字符串 字符串 9
Vec 字节数组 12
Vec 字符数组 18
Vec 短整型数组 13
Vec 整型数组 14
Vec 长整型数组 15
Vec 单精度浮点数组 16
Vec 双精度浮点数组 17
Vec 布尔数组 19
Vec> 其中 T: WritableType + ReadableType Ser => ArrObj; Deser => ArrObj or Collection Ser => 23; Deser => 23 or 24
Option 其中 T: WritableType + ReadableType None => Null; Some => 内部类型 None => 101
用户自定义结构体 ComplexObj 103

用户自定义类型

您可以使用自己的类型作为键/值。您需要做的所有事情是为您的结构体添加一个 #[derive(IgniteObj)] 属性。

[dependencies]
ignite-rs_derive = "0.1.0"
#[derive(IgniteObj)]
struct MyOtherType {
    list: Vec<Option<FooBar>>,
    arr: Vec<i64>,
}

WriteableTypeReadableType 的实现将为您自动生成。注意,您的结构体中的所有字段也应实现 WriteableTypeReadableType

SSL/TLS

通过 rustls 支持加密连接。

[dependencies.ignite-rs]
version = "0.1.0"
features = ["ssl"]
fn main() {

    // Create ssl config
    let ssl_conf: rustls::ClientConfig = ...;
    // Define hostname which certificate should be verified against
    let hostname = String::from("mydomain.com");

    // Create a client configuration
    let mut client_config = ClientConfig::new("localhost:10800", ssl_conf, hostname);
    
    ...
}

依赖项

~1.5MB
~35K SLoC