cedar
is a Rust framework for building visual/interactive applications.
Note: cedar
is in the experimental stage and rapidly evolving.
Add the following dependency to your Cargo.toml
:
cedar = { git = "https://github.com/jtomschroeder/cedar" }
#![feature(proc_macro)]
#![feature(proc_macro_non_items)]
extern crate cedar;
use cedar::hypertext;
type Model = i32;
#[derive(PartialEq)]
enum Message { Increment, Decrement }
fn update(model: Model, message: &Message) -> Model {
match message {
&Message::Increment => model + 1,
&Message::Decrement => model - 1,
}
}
fn view(model: &Model) -> cedar::dom::Object<Message> {
(hypertext! { |model|
<div>
<button click={Message::Increment}> + </button>
<div>{model}</div>
<button click={Message::Decrement}> - </button>
</div>
})(model)
}
fn main() { cedar::app(0, update, view) }
A cedar
application is composed of a model, update, and view - all declared up-front:
- model: the state of our app
- update: how to update our state based on a message (i.e. event)
- view: how to transform our state into UI 'widgets'
This architecture is powerful, yet simple. Using a declarative approach, we can achieve impressive reactivity without having to worry about threads, locks, event routing, or view controllers.
Check out the examples!
Inspired by:
cedar
is released under the MIT license.