Crates.io | hakuban |
lib.rs | hakuban |
version | 0.7.3 |
source | src |
created_at | 2021-06-11 04:57:30.728021 |
updated_at | 2023-03-05 11:43:14.435356 |
description | Data-object sharing library |
homepage | |
repository | https://gitlab.com/yunta/hakuban/ |
max_upload_size | |
id | 408843 |
size | 466,505 |
Convenient data-object sharing library.
Are you tired of handling all the little details of propagating object states? Computing differences, serialization, network propagation (timeouts, keep-alives, ...), somehow catching-up on reconnection, load balancing object production, event delivery, object lifetime control etc. Hakuban does all of that for you.
For details on structs, modules, cargo feature flags, event handling, etc. head on to documentation.
If you feel you may need something slightly different, there is a list of similar projects at the end of this document.
Some of Hakuban's features and properties:
It's not meant for and won't do: message passing, remote function calls, synchronous "calls" (request-response), allow explicit target addressing, be a work-queue, allow "consuming" objects, work directly with any database, modify objects in transit.
let exchange = LocalExchange::builder().build();
let mut observe_contract = exchange.object((["some-tag"],"xxx")).observe();
let mut expose_contract = exchange.object((["some-tag"],"xxx")).expose();
tokio::spawn(async move {
//ExposeContract emits ObjectStateSink when first observer appears
let mut object_state_sink = expose_contract.next().await.unwrap();
let object_state = ObjectState::new("my data").json_serialize();
object_state_sink.send(object_state).await;
});
tokio::spawn(async move {
//ObserveContract emits ObjectStateStream when exposer uploads first ObjectState
let mut object_state_stream = observe_contract.next().await.unwrap();
let object_state = object_state_stream.next().await.unwrap().json_deserialize::<String>();
println!("{:?}", object_state.data);
});
For more examples check out the examples
directory, and documentation.
Hakuban ruby ffi binding.
Hakuban compiled to wasm, with JS interface to use in browser.
(TODO: add url)
Webapp router, with following properties:
(TODO: add url)
Task queue/scheduler. Aware of resource preparation time. Resources owned and resources required by task are graph-structured.
Commercial (aka. shameless plug) robotic ui-testing platform, with visual test-scenario programming, fully remote SUT control, zero-overhead performance measurements, etc.
Not ordered by priority:
Distributed under the MIT License. See LICENSE
for more information.
To get help, praise the author(s), laugh at problems of others, or just hang around observing progress - join hakuban's matrix channel #hakuban:matrix.org
If you're looking for more intimate contact, talk to yunta
- on matrix @yunta:mikoton.com, or email yunta@mikoton.com.
The list does not contain change- or message- focused projects, nor projects with integrated database. Hopefully. It's surprisingly difficult to figure out what some of those actually do: