blob: 6b79086dfddaa5db258845da7378bfdc24785b0f [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use {
fidl_fuchsia_hardware_vsock::Addr as Raw,
std::{
hash::{Hash, Hasher},
ops::{Deref, DerefMut},
},
};
#[derive(Debug)]
pub struct Vsock {
inner: Raw,
}
impl From<Raw> for Vsock {
fn from(addr: Raw) -> Self {
Vsock { inner: addr }
}
}
impl PartialEq for Vsock {
fn eq(&self, other: &Self) -> bool {
self.inner.local_port == other.inner.local_port
&& self.inner.remote_port == other.inner.remote_port
&& self.inner.remote_cid == other.inner.remote_cid
}
}
impl Eq for Vsock {}
impl Hash for Vsock {
fn hash<H: Hasher>(&self, state: &mut H) {
self.inner.local_port.hash(state);
self.inner.remote_port.hash(state);
self.inner.remote_cid.hash(state);
}
}
impl Deref for Vsock {
type Target = Raw;
fn deref(&self) -> &Self::Target {
&self.inner
}
}
impl DerefMut for Vsock {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.inner
}
}
impl Clone for Vsock {
fn clone(&self) -> Self {
Vsock {
inner: Raw {
local_port: self.inner.local_port,
remote_port: self.inner.remote_port,
remote_cid: self.inner.remote_cid,
},
}
}
}
impl Vsock {
pub fn new(local_port: u32, remote_port: u32, remote_cid: u32) -> Vsock {
Vsock {
inner: Raw {
local_port,
remote_port,
remote_cid,
},
}
}
}