mirror of
https://github.com/fluencelabs/fluid
synced 2025-07-30 19:52:00 +00:00
backend in rust WIP
This commit is contained in:
2
backend-rust/.gitignore
vendored
Normal file
2
backend-rust/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
.idea
|
||||
*.iml
|
22
backend-rust/Cargo.toml
Normal file
22
backend-rust/Cargo.toml
Normal file
@@ -0,0 +1,22 @@
|
||||
[package]
|
||||
name = "fluid"
|
||||
version = "0.1.0"
|
||||
authors = ["Fluence Labs"]
|
||||
publish = false
|
||||
description = "Decentralized feed built on Fluence"
|
||||
edition = "2018"
|
||||
|
||||
[lib]
|
||||
name = "fluid"
|
||||
path = "src/lib.rs"
|
||||
crate-type = ["cdylib"]
|
||||
|
||||
[profile.release]
|
||||
debug = false
|
||||
lto = true
|
||||
opt-level = "z"
|
||||
panic = "abort"
|
||||
|
||||
[dependencies]
|
||||
log = "0.4"
|
||||
fluence = { version = "0.1.6", features = ["wasm_logger"] }
|
55
backend-rust/src/main.rs
Normal file
55
backend-rust/src/main.rs
Normal file
@@ -0,0 +1,55 @@
|
||||
use fluence::sdk::*;
|
||||
use log::info;
|
||||
|
||||
fn init() {
|
||||
logger::WasmLogger::init_with_level(log::Level::Info).unwrap();
|
||||
}
|
||||
|
||||
#[invocation_handler(init_fn = init)]
|
||||
fn main(arg: String) -> String {
|
||||
println!("Hello, world!");
|
||||
|
||||
let query = "CREATE VIRTUAL TABLE users USING FTS5(body)";
|
||||
unsafe {
|
||||
let bytes = query.as_bytes();
|
||||
let query_ptr = allocate(bytes.len());
|
||||
for (i, byte) in bytes.iter().enumerate() {
|
||||
let ptr = query_ptr as usize + 8*i;
|
||||
store(ptr, *byte);
|
||||
}
|
||||
|
||||
let result_ptr = invoke(query_ptr, bytes.len());
|
||||
|
||||
let mut result_size = 0;
|
||||
for i in 0..4 {
|
||||
let ptr = (result_ptr + 8*i) as usize;
|
||||
b = load(ptr);
|
||||
result_size = result_size | (b >> 8*i)
|
||||
}
|
||||
|
||||
let mut result_bytes: &[u8] = &[0 as u8; result_size];
|
||||
for i in 0..result_size {
|
||||
let ptr = (result_ptr + 8*i) as usize;
|
||||
b = load(ptr);
|
||||
result_bytes[i] = b;
|
||||
}
|
||||
|
||||
let result_str = std::str::from_utf8(result_bytes);
|
||||
if result_str.is_err() {
|
||||
info!("unable to decode result from result_bytes: {}", result_bytes);
|
||||
}
|
||||
|
||||
info!("result is {}", result_str);
|
||||
|
||||
result_str.expect("unable to decode result").to_string()
|
||||
}
|
||||
}
|
||||
|
||||
#[link(wasm_import_module = "sqlite")]
|
||||
extern "C" {
|
||||
fn allocate(size: usize) -> i32;
|
||||
fn deallocate(ptr: i32, size: usize) -> void;
|
||||
fn invoke(ptr: i32, size: usize) -> i32;
|
||||
fn store(ptr: usize, byte: u8) -> void;
|
||||
fn load(ptr: usize) -> u8;
|
||||
}
|
Reference in New Issue
Block a user