diff options
author | Cara Salter <cara@devcara.com> | 2022-04-12 13:30:15 -0400 |
---|---|---|
committer | Cara Salter <cara@devcara.com> | 2022-04-12 13:30:15 -0400 |
commit | 1fef014508c915b388de371583b0a869684fc7ea (patch) | |
tree | 9f2f4c04c472e0883055a8b23a71f724c503ee04 /src/house.rs | |
parent | 34af52c58daae7ad75c0871e88e7b937fcd078fb (diff) | |
download | solarlib-1fef014508c915b388de371583b0a869684fc7ea.tar.gz solarlib-1fef014508c915b388de371583b0a869684fc7ea.zip |
Add `House` definition and impls
Also rename modules to make more sense with the theme
Diffstat (limited to 'src/house.rs')
-rw-r--r-- | src/house.rs | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/house.rs b/src/house.rs new file mode 100644 index 0000000..6159c33 --- /dev/null +++ b/src/house.rs @@ -0,0 +1,61 @@ +/*! + * `House`s are where [crate::waifu::Waifu]s live (the physical hypervisors that + * libvirtd connects to + */ +use crate::waifu::*; +use crate::errors::Error; +use serde::{Serialize, Deserialize}; +use std::convert::TryFrom; +use virt::connect::Connect; +use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; + +#[derive(Serialize, Deserialize, Debug)] +pub enum Address { + IP(String), + Domain(String) +} + +impl ToString for Address { + fn to_string(&self) -> String { + match self { + Address::IP(s) => s.clone(), + Address::Domain(s) => s.clone(), + } + } +} + +/// Defines a "house" where waifus live +#[derive(Debug, Serialize, Deserialize)] +pub struct House { + /// Hostname + pub name: String, + /// FQDN or IP address, a way to talk to the house + pub address: Address +} + +impl House { + pub fn new(hostname: String, addr: Address) -> Result<Self, Error> { + let mut c = Connect::open(&format!("qemu+ssh://{}/system", addr.to_string()))?; + + // If the connection succeeds, we've got one! + Ok(Self { + name: hostname.clone(), + address: addr + }) + } +} + +#[cfg(test)] +mod test { + use super::*; + /// Kind of a stupid test, but just a sanity check to make sure that [ToString] impl up above + /// is still working + #[test] + fn addr_to_string() { + let a: Address = Address::IP("127.0.0.1".to_string()); + let d: Address = Address::Domain("example.com".to_string()); + + assert_eq!(String::from("127.0.0.1"), a.to_string()); + assert_eq!("example.com".to_string(), d.to_string()); + } +} |