use std::fmt::Debug;
use serde::de::DeserializeOwned;
use crate::ui::{Action, Bay, Item, Notice, Panel, Part};
use crate::{Effect, Subscription, Task};
pub trait Widget: Sized + 'static {
type Config: DeserializeOwned;
type Message: Clone + Debug + Send + Sync + 'static;
fn new(config: Self::Config) -> (Self, Task<Self::Message>);
fn update(&mut self, message: Self::Message) -> Effect<Self::Message>;
fn subscription(&self) -> Subscription<Self::Message> {
Subscription::none()
}
fn item(&self) -> Item<Self::Message>;
fn popover(&self) -> Option<Panel<Self::Message>> {
None
}
fn dialog(&self) -> Option<Panel<Self::Message>> {
None
}
fn notices(&self) -> Vec<Notice<Self::Message>> {
Vec::new()
}
fn actions(&self) -> Vec<Action<Self::Message>> {
Vec::new()
}
fn part(&self, bay: &Bay) -> Option<Part<Self::Message>> {
let _ = bay;
None
}
}