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

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