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
//! A [`Resource`] is an object that can be waited on. [`Resource`]s hold its
//! own configuration based on the protocols used.

pub mod file;
pub mod http;
pub mod tcp;

use anyhow::Result;

use crate::{WaitOptions, Waitable};

use self::file::FileWaiter;
use self::http::HttpWaiter;
use self::tcp::TcpWaiter;

pub enum Resource {
    File(FileWaiter),
    Http(HttpWaiter),
    Tcp(TcpWaiter),
}

impl Waitable for Resource {
    async fn wait(self, options: WaitOptions) -> Result<()> {
        match self {
            Resource::File(file) => file.wait(options).await,
            Resource::Http(http) => http.wait(options).await,
            Resource::Tcp(tcp) => tcp.wait(options).await,
        }
    }
}