1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use crate::app::*;
use crate::app::{IrcError, SavedState};
use crate::subscribe_irc;
use anyhow::Result;
use iced::{pane_grid};

// 読み込み済み、保存済み、入力変化した イベントの状態
// TODO: クライアントの作成時awaitの非同期処理が走る。
// ResultがMessageに渡されるが、MessageはCloneする必要がある。
// irc::error::Error、継承元のio::Error, failure::Error, またanyhowいずれもclone実装がない
// Box化するのが定番のようだが、Box化してしまうと.await?が使えないように感じている。

#[derive(Debug, Clone)]
pub enum Message {
    Loaded(Result<SavedState, LoadError>),
    Saved(Result<(), SaveError>),
    InputChanged(String),
    IrcStart,
    IrcProgressed(subscribe_irc::Progress),
    IrcFinished(Result<(), IrcError>),
    PostMessage,
    Split(pane_grid::Axis, pane_grid::Pane),
    SplitFocused(pane_grid::Axis),
    FocusAdjacent(pane_grid::Direction),
    Clicked(pane_grid::Pane),
    Dragged(pane_grid::DragEvent),
    Resized(pane_grid::ResizeEvent),
    Close(pane_grid::Pane),
    CloseFocused,
    None(()),
}

impl Message {
    pub async fn change() -> Result<(), IrcError> {
        Ok(())
    }
}