mirror of
https://github.com/outbackdingo/firezone.git
synced 2026-01-27 18:18:55 +00:00
The `connlib-shared` crate has become a bit of a dependency magnet without a clear purpose. It hosts utilities like `get_user_agent`, messages for the client and gateway to communicate with the portal and domain types like `ResourceId`. To create a better dependency structure in our workspace, we repurpose `connlib-shared` as a `connlib-model` crate. Its purpose is to host domain-specific model types that multiple crates may want to use. For that purpose, we rename the `callbacks::ResourceDescription` type to `ResourceView`, designating that this is a _view_ onto a resource as seen by `connlib`. The message types which currently double up as connlib-internal model thus become an implementation detail of `firezone-tunnel` and shouldn't be used for anything else. --------- Signed-off-by: Reactor Scram <ReactorScram@users.noreply.github.com> Co-authored-by: Reactor Scram <ReactorScram@users.noreply.github.com>
187 lines
4.2 KiB
Rust
187 lines
4.2 KiB
Rust
//! This crates contains shared types and behavior between all the other libraries.
|
|
//!
|
|
//! This includes types provided by external crates, i.e. [boringtun] to make sure that
|
|
//! we are using the same version across our own crates.
|
|
|
|
mod view;
|
|
|
|
pub use boringtun::x25519::PublicKey;
|
|
pub use boringtun::x25519::StaticSecret;
|
|
pub use view::{
|
|
CidrResourceView, DnsResourceView, InternetResourceView, ResourceStatus, ResourceView,
|
|
};
|
|
|
|
pub type DomainName = domain::base::Name<Vec<u8>>;
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
use std::fmt;
|
|
use std::str::FromStr;
|
|
use uuid::Uuid;
|
|
|
|
#[derive(Hash, Deserialize, Serialize, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
|
|
pub struct GatewayId(Uuid);
|
|
|
|
#[derive(Hash, Deserialize, Serialize, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
|
|
pub struct ResourceId(Uuid);
|
|
|
|
#[derive(Hash, Deserialize, Serialize, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
|
|
pub struct RelayId(Uuid);
|
|
|
|
impl RelayId {
|
|
pub fn from_u128(v: u128) -> Self {
|
|
Self(Uuid::from_u128(v))
|
|
}
|
|
}
|
|
|
|
impl FromStr for RelayId {
|
|
type Err = uuid::Error;
|
|
|
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
|
Ok(RelayId(Uuid::parse_str(s)?))
|
|
}
|
|
}
|
|
|
|
impl ResourceId {
|
|
pub fn random() -> ResourceId {
|
|
ResourceId(Uuid::new_v4())
|
|
}
|
|
|
|
pub fn from_u128(v: u128) -> Self {
|
|
Self(Uuid::from_u128(v))
|
|
}
|
|
}
|
|
|
|
impl GatewayId {
|
|
pub fn from_u128(v: u128) -> Self {
|
|
Self(Uuid::from_u128(v))
|
|
}
|
|
}
|
|
|
|
#[derive(Hash, Deserialize, Serialize, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
|
|
pub struct ClientId(Uuid);
|
|
|
|
impl FromStr for ClientId {
|
|
type Err = uuid::Error;
|
|
|
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
|
Ok(ClientId(Uuid::parse_str(s)?))
|
|
}
|
|
}
|
|
|
|
impl ClientId {
|
|
pub fn from_u128(v: u128) -> Self {
|
|
Self(Uuid::from_u128(v))
|
|
}
|
|
}
|
|
|
|
impl FromStr for ResourceId {
|
|
type Err = uuid::Error;
|
|
|
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
|
Ok(ResourceId(Uuid::parse_str(s)?))
|
|
}
|
|
}
|
|
|
|
impl FromStr for GatewayId {
|
|
type Err = uuid::Error;
|
|
|
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
|
Ok(GatewayId(Uuid::parse_str(s)?))
|
|
}
|
|
}
|
|
|
|
impl fmt::Display for ResourceId {
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
write!(f, "{}", self.0)
|
|
}
|
|
}
|
|
|
|
impl fmt::Display for ClientId {
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
write!(f, "{}", self.0)
|
|
}
|
|
}
|
|
|
|
impl fmt::Display for GatewayId {
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
write!(f, "{}", self.0)
|
|
}
|
|
}
|
|
|
|
impl fmt::Display for RelayId {
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
write!(f, "{}", self.0)
|
|
}
|
|
}
|
|
|
|
impl fmt::Debug for ResourceId {
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
fmt::Display::fmt(&self, f)
|
|
}
|
|
}
|
|
|
|
impl fmt::Debug for ClientId {
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
fmt::Display::fmt(&self, f)
|
|
}
|
|
}
|
|
|
|
impl fmt::Debug for GatewayId {
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
fmt::Display::fmt(&self, f)
|
|
}
|
|
}
|
|
|
|
impl fmt::Debug for RelayId {
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
fmt::Display::fmt(&self, f)
|
|
}
|
|
}
|
|
|
|
#[derive(Debug, Deserialize, Serialize, Clone, Eq, PartialOrd, Ord)]
|
|
pub struct Site {
|
|
pub id: SiteId,
|
|
pub name: String,
|
|
}
|
|
|
|
impl std::hash::Hash for Site {
|
|
fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
|
|
self.id.hash(state);
|
|
}
|
|
}
|
|
|
|
impl PartialEq for Site {
|
|
fn eq(&self, other: &Self) -> bool {
|
|
self.id == other.id
|
|
}
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
|
|
pub struct SiteId(Uuid);
|
|
|
|
impl FromStr for SiteId {
|
|
type Err = uuid::Error;
|
|
|
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
|
Ok(SiteId(Uuid::parse_str(s)?))
|
|
}
|
|
}
|
|
|
|
impl SiteId {
|
|
pub fn from_u128(v: u128) -> Self {
|
|
Self(Uuid::from_u128(v))
|
|
}
|
|
}
|
|
|
|
impl fmt::Display for SiteId {
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
write!(f, "{}", self.0)
|
|
}
|
|
}
|
|
|
|
impl fmt::Debug for SiteId {
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
fmt::Display::fmt(&self, f)
|
|
}
|
|
}
|