mirror of
https://github.com/fluencelabs/fluid
synced 2025-07-31 12:12:01 +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