Skip to content

Instantly share code, notes, and snippets.

@papertigers
Forked from rust-play/playground.rs
Created April 8, 2019 14:36
Show Gist options
  • Save papertigers/e1bff8cd9e0ce40634a251242565545f to your computer and use it in GitHub Desktop.
Save papertigers/e1bff8cd9e0ce40634a251242565545f to your computer and use it in GitHub Desktop.
Code shared from the Rust Playground
use std::net::{self, AddrParseError, IpAddr, SocketAddr};
use std::str::FromStr;
#[derive(Debug)]
struct Endpoint {
addr: SocketAddr,
}
impl Endpoint {
fn new<S: Into<SocketAddr>>(s: S) -> Self {
Endpoint { addr: s.into() }
}
fn from_parts<I: Into<IpAddr>>(ip: I, port: u16) -> Self {
Endpoint {
addr: SocketAddr::new(ip.into(), port),
}
}
}
impl FromStr for Endpoint {
type Err = AddrParseError;
fn from_str(s: &str) -> Result<Endpoint, AddrParseError> {
Ok(Endpoint {
addr: SocketAddr::from_str(s)?,
})
}
}
fn main() {
let sock = SocketAddr::new(IpAddr::V4(net::Ipv4Addr::new(127, 0, 0, 1)), 8080);
let foo = Endpoint::new(sock);
dbg!(foo);
let ip = net::Ipv4Addr::new(127, 0, 0, 1);
let foo = Endpoint::from_parts(ip, 22);
dbg!(foo);
let ip = net::Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1);
let foo = Endpoint::from_parts(ip, 22);
dbg!(foo);
let ip = [127, 0, 0, 2];
let foo = Endpoint::from_parts(ip, 22);
dbg!(foo);
// Success
let foo = Endpoint::from_str("10.0.1.1:22");
dbg!(foo);
// Error
let foo = Endpoint::from_str("10.0.1.1.22");
dbg!(foo);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment