MCPcopy Create free account
hub / github.com/PowerShell/DSC / invoke

Method invoke

lib/dsc-lib/src/functions/parse_cidr.rs:30–91  ·  view source on GitHub ↗
(&self, args: &[Value], _context: &Context)

Source from the content-addressed store, hash-verified

28 }
29
30 fn invoke(&self, args: &[Value], _context: &Context) -> Result<Value, DscError> {
31 debug!("{}", t!("functions.parseCidr.invoked"));
32
33 let cidr_string = args[0].as_str().unwrap();
34
35 // Validate that the input contains a CIDR prefix (contains '/')
36 if !cidr_string.contains('/') {
37 return Err(DscError::FunctionArg(
38 "parseCidr".to_string(),
39 t!("functions.parseCidr.invalidCidr", cidr = cidr_string).to_string(),
40 ));
41 }
42
43 let network = cidr_string.parse::<IpNetwork>().map_err(|_| {
44 DscError::FunctionArg(
45 "parseCidr".to_string(),
46 t!("functions.parseCidr.invalidCidr", cidr = cidr_string).to_string(),
47 )
48 })?;
49
50 let result = match network {
51 IpNetwork::V4(net) => {
52 let network_addr = net.network();
53 let broadcast_addr = net.broadcast();
54 let first_usable = if net.prefix() == 32 {
55 network_addr
56 } else {
57 let first_ip = u32::from(network_addr);
58 std::net::Ipv4Addr::from(first_ip + 1)
59 };
60 let last_usable = if net.prefix() == 32 {
61 broadcast_addr
62 } else {
63 let last_ip = u32::from(broadcast_addr);
64 std::net::Ipv4Addr::from(last_ip - 1)
65 };
66
67 json!({
68 "network": network_addr.to_string(),
69 "netmask": net.mask().to_string(),
70 "broadcast": broadcast_addr.to_string(),
71 "firstUsable": first_usable.to_string(),
72 "lastUsable": last_usable.to_string(),
73 "cidr": net.prefix()
74 })
75 }
76 IpNetwork::V6(net) => {
77 let network_addr = net.network();
78 let broadcast_addr = net.broadcast();
79
80 json!({
81 "network": network_addr.to_string(),
82 "netmask": net.mask().to_string(),
83 "firstUsable": network_addr.to_string(),
84 "lastUsable": broadcast_addr.to_string(),
85 "cidr": net.prefix()
86 })
87 }

Callers

nothing calls this directly

Calls 2

FunctionArgEnum · 0.85
as_strMethod · 0.80

Tested by

no test coverage detected