blob: df6962063216a7cf0a8dbeebe317248545692b00 [file] [log] [blame]
// Copyright 2020 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 {
crate::ConfigLevel,
std::{convert::From, default::Default},
};
#[derive(Debug, PartialEq, Copy, Clone)]
pub enum SelectMode {
First,
All,
}
#[derive(Debug, Clone)]
pub struct ConfigQuery<'a> {
pub name: Option<&'a str>,
pub level: Option<ConfigLevel>,
pub build_dir: Option<&'a str>,
pub select: SelectMode,
}
impl<'a> ConfigQuery<'a> {
pub fn new(
name: Option<&'a str>,
level: Option<ConfigLevel>,
build_dir: Option<&'a str>,
select: SelectMode,
) -> Self {
Self { name, level, build_dir, select }
}
}
impl<'a> Default for ConfigQuery<'a> {
fn default() -> Self {
Self { name: None, level: None, build_dir: None, select: SelectMode::First }
}
}
impl<'a> From<&'a str> for ConfigQuery<'a> {
fn from(value: &'a str) -> Self {
ConfigQuery { name: Some(value), ..Default::default() }
}
}
impl<'a> From<&'a String> for ConfigQuery<'a> {
fn from(value: &'a String) -> Self {
ConfigQuery { name: Some(&value), ..Default::default() }
}
}
impl<'a> From<ConfigLevel> for ConfigQuery<'a> {
fn from(value: ConfigLevel) -> Self {
ConfigQuery { level: Some(value), ..Default::default() }
}
}
impl<'a> From<(&'a str, ConfigLevel)> for ConfigQuery<'a> {
fn from(value: (&'a str, ConfigLevel)) -> Self {
ConfigQuery { name: Some(value.0), level: Some(value.1), ..Default::default() }
}
}
impl<'a> From<(&'a String, ConfigLevel)> for ConfigQuery<'a> {
fn from(value: (&'a String, ConfigLevel)) -> Self {
ConfigQuery::from((value.0.as_str(), value.1))
}
}
impl<'a> From<(&'a str, &ConfigLevel)> for ConfigQuery<'a> {
fn from(value: (&'a str, &ConfigLevel)) -> Self {
ConfigQuery { name: Some(value.0), level: Some(*value.1), ..Default::default() }
}
}
impl<'a> From<(&'a str, &'a str)> for ConfigQuery<'a> {
fn from(value: (&'a str, &'a str)) -> Self {
ConfigQuery { name: Some(value.0), build_dir: Some(value.1), ..Default::default() }
}
}
impl<'a> From<(&'a str, &ConfigLevel, &'a str)> for ConfigQuery<'a> {
fn from(value: (&'a str, &ConfigLevel, &'a str)) -> Self {
ConfigQuery {
name: Some(value.0),
level: Some(*value.1),
build_dir: Some(value.2),
..Default::default()
}
}
}
impl<'a> From<(&'a str, &'a ConfigLevel, &'a Option<String>)> for ConfigQuery<'a> {
fn from(value: (&'a str, &'a ConfigLevel, &'a Option<String>)) -> Self {
ConfigQuery {
name: Some(value.0),
level: Some(*value.1),
build_dir: value.2.as_ref().map(|s| s.as_str()),
..Default::default()
}
}
}
impl<'a> From<(&'a String, &'a ConfigLevel, &'a Option<String>)> for ConfigQuery<'a> {
fn from(value: (&'a String, &'a ConfigLevel, &'a Option<String>)) -> Self {
ConfigQuery {
name: Some(value.0.as_str()),
level: Some(*value.1),
build_dir: value.2.as_ref().map(|s| s.as_str()),
..Default::default()
}
}
}
impl<'a> From<(&'a str, &'a SelectMode)> for ConfigQuery<'a> {
fn from(value: (&'a str, &'a SelectMode)) -> Self {
ConfigQuery { name: Some(value.0), select: *value.1, ..Default::default() }
}
}
impl<'a> From<(&'a String, &'a SelectMode)> for ConfigQuery<'a> {
fn from(value: (&'a String, &'a SelectMode)) -> Self {
ConfigQuery { name: Some(value.0), select: *value.1, ..Default::default() }
}
}