Skip to main content

watch_path/
lib.rs

1pub mod ftp;
2pub mod http;
3pub mod local;
4pub mod ssh;
5pub mod url;
6pub mod watcher;
7
8pub use url::{parse as parse_url, Protocol, WatchTarget};
9pub use watcher::{
10    ConnectionState, PathWatcher, WatchError, WatchEvent, WatchEventKind, WatchOptions,
11};
12
13use std::path::Path;
14
15pub fn connect(url: &str, options: &WatchOptions) -> Result<Box<dyn PathWatcher>, WatchError> {
16    let target = url::parse(url)?;
17
18    match target.protocol {
19        Protocol::File => {
20            let path = Path::new(&target.path);
21            let watcher = local::LocalWatcher::new(path, options)?;
22            Ok(Box::new(watcher))
23        }
24        Protocol::Ssh | Protocol::Sftp | Protocol::Scp => {
25            let watcher = ssh::SshWatcher::connect(target, options)?;
26            Ok(Box::new(watcher))
27        }
28        Protocol::Ftp => {
29            let watcher = ftp::FtpWatcher::connect(target, options)?;
30            Ok(Box::new(watcher))
31        }
32        Protocol::Http | Protocol::Https => {
33            let watcher = http::HttpWatcher::connect(&target, options)?;
34            Ok(Box::new(watcher))
35        }
36    }
37}