Skip to content

Commit

Permalink
Introduced NewTypes for name, description, tags
Browse files Browse the repository at this point in the history
Introduced NewTypes due to be consistent over our code base.
  • Loading branch information
mtwardawski authored and kKdH committed Feb 1, 2024
1 parent fa3f56a commit afed626
Show file tree
Hide file tree
Showing 24 changed files with 835 additions and 321 deletions.
17 changes: 9 additions & 8 deletions opendut-carl/src/actions/peers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ mod test {
use rstest::*;

use opendut_types::peer::{PeerLocation, PeerName};
use opendut_types::topology::Topology;
use opendut_types::topology::{DeviceDescription, DeviceName, Topology};
use opendut_types::util::net::NetworkInterfaceName;

use crate::resources::manager::ResourcesManager;
Expand All @@ -287,6 +287,7 @@ mod test {
mod store_peer_descriptor {
use googletest::prelude::*;
use rstest::*;
use opendut_types::topology::{DeviceDescription, DeviceName};
use opendut_types::util::net::NetworkInterfaceName;

use super::*;
Expand All @@ -310,8 +311,8 @@ mod test {
let additional_device_id = DeviceId::random();
let additional_device = DeviceDescriptor {
id: additional_device_id,
name: String::from("PeerA Device 42"),
description: String::from("Additional device for peerA"),
name: DeviceName::try_from("PeerA_Device_42").unwrap(),
description: DeviceDescription::try_from("Additional device for peerA").ok(),
interface: NetworkInterfaceName::try_from("eth1").unwrap(),
tags: vec![],
};
Expand Down Expand Up @@ -358,20 +359,20 @@ mod test {
let peer_a_descriptor = PeerDescriptor {
id: peer_a_id,
name: PeerName::try_from("PeerA").unwrap(),
location: PeerLocation::new("Ulm"),
location: PeerLocation::try_from("Ulm").ok(),
topology: Topology {
devices: vec![
DeviceDescriptor {
id: peer_a_device_1,
name: String::from("PeerA Device 1"),
description: String::from("Huii"),
name: DeviceName::try_from("PeerA_Device_1").unwrap(),
description: DeviceDescription::try_from("Huii").ok(),
interface: NetworkInterfaceName::try_from("eth0").unwrap(),
tags: vec![],
},
DeviceDescriptor {
id: peer_a_device_2,
name: String::from("PeerA Device 2"),
description: String::from("Huii"),
name: DeviceName::try_from("PeerA_Device_2").unwrap(),
description: DeviceDescription::try_from("Huii").ok(),
interface: NetworkInterfaceName::try_from("eth1").unwrap(),
tags: vec![],
}
Expand Down
20 changes: 10 additions & 10 deletions opendut-carl/src/cluster/manager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ mod test {

use opendut_types::cluster::ClusterName;
use opendut_types::peer::{PeerDescriptor, PeerId, PeerLocation, PeerName};
use opendut_types::topology::{DeviceDescriptor, DeviceId, Topology};
use opendut_types::topology::{DeviceDescription, DeviceDescriptor, DeviceId, DeviceName, Topology};
use opendut_types::util::net::NetworkInterfaceName;

use crate::actions::{CreateClusterConfigurationParams, StorePeerDescriptorParams};
Expand Down Expand Up @@ -274,13 +274,13 @@ mod test {
let peer_a = PeerDescriptor {
id: peer_a_id,
name: PeerName::try_from("PeerA").unwrap(),
location: PeerLocation::new("Ulm"),
location: PeerLocation::try_from("Ulm").ok(),
topology: Topology {
devices: vec![
DeviceDescriptor {
id: peer_a_device_1,
name: String::from("PeerA Device 1"),
description: String::from("Huii"),
name: DeviceName::try_from("PeerA_Device_1").unwrap(),
description: DeviceDescription::try_from("Huii").ok(),
interface: NetworkInterfaceName::try_from("eth0").unwrap(),
tags: vec![],
}
Expand All @@ -293,13 +293,13 @@ mod test {
let peer_b = PeerDescriptor {
id: peer_b_id,
name: PeerName::try_from("PeerB").unwrap(),
location: PeerLocation::new("Ulm"),
location: PeerLocation::try_from("Ulm").ok(),
topology: Topology {
devices: vec![
DeviceDescriptor {
id: peer_b_device_1,
name: String::from("PeerB Device 1"),
description: String::from("Pfuii"),
name: DeviceName::try_from("PeerB_Device_1").unwrap(),
description: DeviceDescription::try_from("Pfuii").ok(),
interface: NetworkInterfaceName::try_from("can1").unwrap(),
tags: vec![],
}
Expand Down Expand Up @@ -402,8 +402,8 @@ mod test {
fn device(id: DeviceId, interface: NetworkInterfaceName) -> DeviceDescriptor {
DeviceDescriptor {
id,
name: format!("test-device-{id}"),
description: String::new(),
name: DeviceName::try_from(format!("test-device-{id}")).unwrap(),
description: None,
interface,
tags: Vec::new(),
}
Expand All @@ -419,7 +419,7 @@ mod test {
PeerDescriptor {
id,
name: PeerName::try_from(format!("peer-{id}")).unwrap(),
location: PeerLocation::new("Ulm"),
location: PeerLocation::try_from("Ulm").ok(),
topology: Topology {
devices,
},
Expand Down
2 changes: 1 addition & 1 deletion opendut-carl/src/grpc/peer_manager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ mod tests {
let peer_descriptor = PeerDescriptor {
id: peer_id,
name: PeerName::try_from("TestPeer").unwrap(),
location: PeerLocation::new("SiFi"),
location: PeerLocation::try_from("SiFi").ok(),
topology: Topology::default(),
};

Expand Down
2 changes: 1 addition & 1 deletion opendut-carl/src/resources/manager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ mod test {
let peer = PeerDescriptor {
id: peer_resource_id,
name: PeerName::try_from("TestPeer").unwrap(),
location: PeerLocation::new("Ulm"),
location: PeerLocation::try_from("Ulm").ok(),
topology: Topology::default(),
};

Expand Down
31 changes: 16 additions & 15 deletions opendut-cleo/src/commands/cluster_configuration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ pub mod create {

fn check_devices(all_devices: &[DeviceDescriptor], device_names: &[String]) -> Vec<Result<DeviceDescriptor, crate::Error>> {
let checked_devices = device_names.iter().map(|device_name| {
let maybe_device = all_devices.iter().find(|device| &device.name == device_name);
let maybe_device = all_devices.iter().find(|device| &String::from(device.name.value()) == device_name);
if let Some(device) = maybe_device {
Ok(Clone::clone(device))
}
Expand All @@ -76,30 +76,30 @@ pub mod create {
use super::*;
use googletest::prelude::*;
use rstest::{fixture, rstest};
use opendut_types::topology::DeviceId;
use opendut_types::topology::{DeviceDescription, DeviceId, DeviceName};
use opendut_types::util::net::NetworkInterfaceName;

#[fixture]
fn all_devices() -> Vec<DeviceDescriptor> {
vec![
DeviceDescriptor {
id: DeviceId::random(),
name: String::from("MyDevice"),
description: String::new(),
name: DeviceName::try_from("MyDevice").unwrap(),
description: DeviceDescription::try_from("").ok(),
interface: NetworkInterfaceName::try_from("eth0").unwrap(),
tags: vec![],
},
DeviceDescriptor {
id: DeviceId::random(),
name: String::from("YourDevice"),
description: String::new(),
name: DeviceName::try_from("YourDevice").unwrap(),
description: DeviceDescription::try_from("").ok(),
interface: NetworkInterfaceName::try_from("eth0").unwrap(),
tags: vec![],
},
DeviceDescriptor {
id: DeviceId::random(),
name: String::from("HisDevice"),
description: String::new(),
name: DeviceName::try_from("HisDevice").unwrap(),
description: DeviceDescription::try_from("").ok(),
interface: NetworkInterfaceName::try_from("eth0").unwrap(),
tags: vec![],
}
Expand Down Expand Up @@ -202,8 +202,9 @@ pub mod describe {

use opendut_carl_api::carl::CarlClient;
use opendut_types::cluster::{ClusterId, ClusterName};
use opendut_types::peer::PeerId;
use opendut_types::peer::{PeerId, PeerName};
use serde::Serialize;
use opendut_types::topology::DeviceName;

use crate::DescribeOutputFormat;

Expand All @@ -212,8 +213,8 @@ pub mod describe {
name: ClusterName,
id: ClusterId,
leader: PeerId,
peers: Vec<String>,
devices: Vec<String>,
peers: Vec<PeerName>,
devices: Vec<DeviceName>,
}

pub async fn execute(carl: &mut CarlClient, id: Uuid, output: DescribeOutputFormat) -> crate::Result<()> {
Expand Down Expand Up @@ -242,7 +243,7 @@ pub mod describe {
.filter(|peer| {
peer.topology.devices.iter().any(|device| cluster_devices.contains(&device.name))
})
.map(|peer| String::from(peer.name))
.map(|peer| peer.name)
.collect::<Vec<_>>()
};

Expand All @@ -260,9 +261,9 @@ pub mod describe {
Cluster Configuration: {}
Id: {}
Leader: {}
Peers: [{}]
Devices: [{}]
"), table.name, table.id, table.leader, table.peers.join(", "), table.devices.join(", "))
Peers: [{:?}]
Devices: [{:?}]
"), table.name, table.id, table.leader, table.peers, table.devices)
}
DescribeOutputFormat::Json => {
serde_json::to_string(&table).unwrap()
Expand Down
61 changes: 44 additions & 17 deletions opendut-cleo/src/commands/device.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@ use cli_table::{Table, WithTitle};
use serde::Serialize;

use opendut_carl_api::carl::CarlClient;
use opendut_types::topology::{DeviceDescriptor, DeviceId};
use opendut_types::topology::{DeviceDescription, DeviceDescriptor, DeviceId, DeviceName};

use crate::ListOutputFormat;

#[derive(Table, Serialize)]
struct DeviceTable {
#[table(title = "Name")]
name: String,
name: DeviceName,
#[table(title = "DeviceID")]
id: DeviceId,
#[table(title = "Description")]
description: String,
description: DeviceDescription,
#[table(title = "Tags")]
tags: String,
}
Expand All @@ -34,7 +34,7 @@ pub mod create {
use uuid::Uuid;
use opendut_carl_api::carl::CarlClient;
use opendut_types::peer::{PeerId};
use opendut_types::topology::{DeviceDescriptor, DeviceId};
use opendut_types::topology::{DeviceDescription, DeviceDescriptor, DeviceId, DeviceName, DeviceTag};
use opendut_types::util::net::NetworkInterfaceName;
use crate::{CreateOutputFormat, DescribeOutputFormat};

Expand Down Expand Up @@ -63,25 +63,41 @@ pub mod create {

let new_device = DeviceDescriptor {
id: device_id,
name,
description: description.unwrap_or_default(),
name: DeviceName::try_from(name)
.map_err(|error| error.to_string())?,
description: description
.map(DeviceDescription::try_from)
.transpose()
.map_err(|error| error.to_string())?,
interface,
tags: tags.unwrap_or_default(),
tags: tags
.unwrap_or_default()
.into_iter()
.map(|value| DeviceTag::try_from(value))
.collect::<Result<_, _>>()
.map_err(|error| error.to_string())?,
};
peer_descriptor.topology.devices.push(new_device);
}
Some(device) => {
if let Some(name) = name {
device.name = name;
device.name = DeviceName::try_from(name)
.map_err(|error| error.to_string())?;
}
if let Some(description) = description {
device.description = description;
device.description = DeviceDescription::try_from(description)
.map_err(|error| error.to_string())
.ok();
}
if let Some(interface) = interface {
device.interface = interface;
}
if let Some(tags) = tags {
device.tags = tags;
device.tags = tags
.into_iter()
.map(DeviceTag::try_from)
.collect::<Result<_, _>>()
.map_err(|error| error.to_string())?;
}
}
}
Expand All @@ -99,7 +115,7 @@ pub mod describe {
use uuid::Uuid;

use opendut_carl_api::carl::CarlClient;
use opendut_types::topology::DeviceId;
use opendut_types::topology::{DeviceDescription, DeviceId};

use crate::DescribeOutputFormat;

Expand All @@ -120,7 +136,18 @@ pub mod describe {
Description: {}
Interface: {}
Tags: [{}]\
"), device.name, device.id, device.description, device.interface, device.tags.join(", "))
"),
device.name,
device.id,
device.description
.map(DeviceDescription::from)
.unwrap_or_default(),
device.interface,
device.tags
.iter()
.map(|tag| tag.value())
.collect::<Vec<_>>()
.join(", "))
}
DescribeOutputFormat::Json => {
serde_json::to_string(&device).unwrap()
Expand Down Expand Up @@ -150,11 +177,11 @@ pub mod find {
.filter(|device| {
criteria.iter().any(|criterion| {
let pattern = glob::Pattern::new(criterion).expect("Failed to read glob pattern");
pattern.matches(&device.name.to_lowercase())
pattern.matches(&device.name.value().to_lowercase())
|| pattern.matches(&device.id.to_string().to_lowercase())
|| pattern.matches(&device.description.to_lowercase())
|| pattern.matches(&device.description.clone().unwrap().value().to_lowercase())
|| pattern.matches(&device.interface.to_string().to_lowercase())
|| device.tags.iter().any(|tag| pattern.matches(&tag.to_lowercase()))
|| device.tags.iter().any(|tag| pattern.matches(&tag.value().to_lowercase()))
})
})
.map(DeviceTable::from)
Expand Down Expand Up @@ -216,8 +243,8 @@ impl From<DeviceDescriptor> for DeviceTable {
DeviceTable {
name: device.name,
id: device.id,
description: device.description,
tags: device.tags.join(", "),
description: device.description.unwrap_or_default(),
tags: device.tags.iter().map(|tag| tag.value()).collect::<Vec<_>>().join(", "),
}
}
}
Loading

0 comments on commit afed626

Please sign in to comment.