rings/src/main.rs

71 lines
1.8 KiB
Rust

mod args;
use args::Args;
use clap::Parser;
use uds::{UnixSeqpacketListener, UnixSeqpacketConn, UnixSocketAddr};
extern crate uds;
fn main() {
let args = Args::parse();
let result = validate_arguments(&args);
match result {
Ok(_) => {},
Err(err) => println!("{}", err.message)
}
}
fn validate_arguments(args: &Args) -> Result<(), RingsError> {
if !args.server && !args.client {
return Err(RingsError{message: "Please provide either --client or --server".to_string()});
}
if args.server && args.client {
return Err(RingsError{message: "You can't have both flags active at the same time".to_string()});
}
if args.server {
server()?;
return Ok(());
} else if args.client {
return Ok(());
}
Ok(())
}
fn server() -> Result<(), RingsError> {
create_rings_socket()?;
Ok(())
}
fn client( addr: &uds::UnixSocketAddr ) -> Result<UnixSeqpacketConn, RingsError> {
let client = uds::UnixSeqpacketConn::connect_unix_addr(addr);
match client {
Ok(client) => {
return Err(RingsError { message: "to be implemented".to_string() })
},
Err(_) => {
return Err(RingsError { message: "to be written".to_string() })
}
}
}
fn create_rings_socket() -> Result<UnixSeqpacketListener, RingsError> {
let addr = uds::UnixSocketAddr::new("@abstract");
match addr {
Ok(addr) => {
let listener = UnixSeqpacketListener::bind_unix_addr(&addr).expect("create seqpacket listener");
return Ok(listener)
},
Err(_) => {
return Err(RingsError { message: "boop".to_string() })
},
_ => {
return Err(RingsError { message: "something has gone wrong".to_string() })
}
};
}
struct RingsError {
message: String
}