Client/src/ui/objects/app/mod.rs
2023-09-10 16:14:44 -04:00

49 lines
1.1 KiB
Rust

mod imp;
use std::str::FromStr;
use adw::subclass::prelude::*;
use f_uuid::Uuid;
use glib::Object;
use gtk::glib;
glib::wrapper! {
pub struct AppObject(ObjectSubclass<imp::AppObject>);
}
impl AppObject {
pub fn new(name: &str, path: &str) -> Self {
let id = Uuid::new_random();
AppObject::from_fields(id, name, path)
}
pub fn from_fields(id: Uuid, name: &str, path: &str) -> Self {
Object::builder()
.property("id", id.to_string())
.property("name", name)
.property("path", path)
.build()
}
pub fn to_app_data(&self) -> AppData {
let id_str = &self.imp().id.borrow();
let id = Uuid::from_str(id_str).unwrap();
let name = self.imp().name.borrow().clone();
let path = self.imp().path.borrow().clone();
AppData { id, name, path }
}
pub fn from_app_data(app_data: &AppData) -> Self {
Self::from_fields(app_data.id, &app_data.name, &app_data.path)
}
}
#[derive(Default, Clone)]
pub struct AppData {
pub id: Uuid,
pub name: String,
pub path: String
}