blob: 25261ecde1ea4c4a05deabb41dbde81a2f3486b2 [file] [log] [blame]
// Copyright 2021 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 {
cm_rust::{ExposeSource, OfferSource, UseSource},
std::{fmt, fmt::Display},
};
/// A type consolidating all options for the source of a capability route segment.
#[derive(Clone, Debug, PartialEq)]
pub enum CapabilitySourceType {
Parent,
Self_,
Framework,
RootParent,
Decl,
Child(String),
Capability(String),
Debug,
}
impl From<&UseSource> for CapabilitySourceType {
fn from(source: &UseSource) -> Self {
match source {
UseSource::Parent => Self::Parent,
UseSource::Framework => Self::Framework,
UseSource::Debug => Self::Debug,
UseSource::Capability(name) => Self::Capability(name.to_string()),
}
}
}
impl From<&ExposeSource> for CapabilitySourceType {
fn from(source: &ExposeSource) -> Self {
match source {
ExposeSource::Self_ => Self::Self_,
ExposeSource::Child(name) => Self::Child(name.to_string()),
ExposeSource::Framework => Self::Framework,
ExposeSource::Capability(name) => Self::Capability(name.to_string()),
ExposeSource::Collection(_) => panic!("no"),
}
}
}
impl From<&OfferSource> for CapabilitySourceType {
fn from(source: &OfferSource) -> Self {
match source {
OfferSource::Framework => Self::Framework,
OfferSource::Parent => Self::Parent,
OfferSource::Child(name) => Self::Child(name.to_string()),
OfferSource::Self_ => Self::Self_,
OfferSource::Capability(name) => Self::Capability(name.to_string()),
OfferSource::Collection(_) => panic!("no"),
}
}
}
impl Display for CapabilitySourceType {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match &*self {
CapabilitySourceType::Parent => {
write!(f, "parent")
}
CapabilitySourceType::Self_ => {
write!(f, "self")
}
CapabilitySourceType::Framework => {
write!(f, "framework")
}
CapabilitySourceType::RootParent => {
write!(f, "root parent")
}
CapabilitySourceType::Decl => {
write!(f, "declaration")
}
CapabilitySourceType::Child(child) => {
write!(f, "child `{}`", child)
}
CapabilitySourceType::Capability(capability) => {
write!(f, "capability `{}`", capability)
}
CapabilitySourceType::Debug => {
write!(f, "debug")
}
}
}
}