feat: add new crates ui-gpui and ui-iced to workspace

This commit is contained in:
uttarayan21
2025-11-18 15:56:53 +05:30
parent c2fdade4d9
commit c312df3db2
8 changed files with 11408 additions and 90 deletions

2194
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
[workspace] [workspace]
members = [".", "api", "typegen"] members = [".", "api", "typegen", "ui-gpui", "ui-iced"]
[package] [package]
name = "jello" name = "jello"

6
ui-gpui/Cargo.toml Normal file
View File

@@ -0,0 +1,6 @@
[package]
name = "ui-gpui"
version = "0.1.0"
edition = "2024"
[dependencies]

14
ui-gpui/src/lib.rs Normal file
View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

7
ui-iced/Cargo.toml Normal file
View File

@@ -0,0 +1,7 @@
[package]
name = "ui-iced"
version = "0.1.0"
edition = "2024"
[dependencies]
iced = { version = "0.13.1", features = ["canvas", "image", "tokio"] }

53
ui-iced/src/lib.rs Normal file
View File

@@ -0,0 +1,53 @@
use iced::{Element, Task};
struct State {
screen: Screen,
}
enum Screen {
Contacts(Contacts),
Conversation(Conversation),
}
enum Message {
Contacts(contacts::Message),
Conversation(conversation::Message),
}
fn update(state: &mut State, message: Message) -> Task<Message> {
match message {
Message::Contacts(message) => {
if let Screen::Contacts(contacts) = &mut state.screen {
let action = contacts.update(message);
match action {
contacts::Action::None => Task::none(),
contacts::Action::Run(task) => task.map(Message::Contacts),
contacts::Action::Chat(contact) => {
let (conversation, task) = Conversation::new(contact);
state.screen = Screen::Conversation(conversation);
task.map(Message::Conversation)
}
}
} else {
Task::none()
}
}
Message::Conversation(message) => {
if let Screen::Conversation(conversation) = &mut state.screen {
conversation.update(message).map(Message::Conversation)
} else {
Task::none()
}
}
}
}
fn view(state: &State) -> Element<Message> {
match &state.screen {
Screen::Contacts(contacts) => contacts.view().map(Message::Contacts),
Screen::Conversation(conversation) => conversation.view().map(Message::Conversation),
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long