mirror of
https://github.com/achanda/ipnetwork.git
synced 2025-06-16 16:58:50 +00:00
Simplify IpNetwork::from_str impl and update docs
This commit is contained in:
25
src/lib.rs
25
src/lib.rs
@ -117,30 +117,27 @@ impl IpNetwork {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Constructs a new `IpNetwork` from a given &str with a prefix denoting the
|
/// Tries to parse the given string into a `IpNetwork`. Will first try to parse
|
||||||
/// network size. If the prefix is larger than 32 (for IPv4) or 128 (for IPv6), this
|
/// it as an `Ipv4Network` and if that fails as an `Ipv6Network`. If both
|
||||||
/// will raise an `IpNetworkError::InvalidPrefix` error.
|
/// fails it will return an `InvalidAddr` error.
|
||||||
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use std::net::Ipv4Addr;
|
/// use std::net::Ipv4Addr;
|
||||||
/// use ipnetwork::Ipv4Network;
|
/// use ipnetwork::{IpNetwork, Ipv4Network};
|
||||||
/// use ipnetwork::IpNetwork;
|
|
||||||
///
|
///
|
||||||
/// let expected = IpNetwork::V4(Ipv4Network::new(Ipv4Addr::new(10, 1, 9, 32), 16).unwrap());
|
/// let expected = IpNetwork::V4(Ipv4Network::new(Ipv4Addr::new(10, 1, 9, 32), 16).unwrap());
|
||||||
/// let from_cidr: IpNetwork = "10.1.9.32/16".parse().unwrap();
|
/// let from_cidr: IpNetwork = "10.1.9.32/16".parse().unwrap();
|
||||||
/// assert_eq!(expected.ip(), from_cidr.ip());
|
/// assert_eq!(expected, from_cidr);
|
||||||
/// assert_eq!(expected.prefix(), from_cidr.prefix());
|
/// ```
|
||||||
impl FromStr for IpNetwork {
|
impl FromStr for IpNetwork {
|
||||||
type Err = IpNetworkError;
|
type Err = IpNetworkError;
|
||||||
fn from_str(s: &str) -> Result<IpNetwork, IpNetworkError> {
|
fn from_str(s: &str) -> Result<IpNetwork, IpNetworkError> {
|
||||||
let v4addr: Result<Ipv4Network, IpNetworkError> = s.parse();
|
if let Ok(net) = Ipv4Network::from_str(s) {
|
||||||
let v6addr: Result<Ipv6Network, IpNetworkError> = s.parse();
|
Ok(IpNetwork::V4(net))
|
||||||
|
} else if let Ok(net) = Ipv6Network::from_str(s) {
|
||||||
if v4addr.is_ok() {
|
Ok(IpNetwork::V6(net))
|
||||||
Ok(IpNetwork::V4(v4addr.unwrap()))
|
|
||||||
} else if v6addr.is_ok() {
|
|
||||||
Ok(IpNetwork::V6(v6addr.unwrap()))
|
|
||||||
} else {
|
} else {
|
||||||
Err(IpNetworkError::InvalidAddr(s.to_string()))
|
Err(IpNetworkError::InvalidAddr(s.to_string()))
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user