blob: 7ff45f5231abd0e063423be2db74f934d57f7a61 [file]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
use crate::*;
#[pyclass(
eq,
eq_int,
dict,
hash,
frozen,
module = "opendal.services",
from_py_object
)]
#[pyo3(rename_all = "PascalCase")]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Scheme {
{%- for name in srvs %}
#[cfg(feature = "{{service_to_feature(name)}}")]
{{ service_to_pascal(name) }},
{%- endfor %}
}
#[pymethods]
impl Scheme {
#[getter]
pub fn name(&self) -> String {
format!("{:?}", &self)
}
#[getter]
pub fn value(&self) -> &'static str {
(*self).into()
}
}
macro_rules! impl_enum_to_str {
($src:ty { $(
$(#[$cfg:meta])?
$variant:ident => $value:literal
),* $(,)? }) => {
impl From<$src> for &'static str {
fn from(value: $src) -> Self {
match value {
$(
$(#[$cfg])?
<$src>::$variant => $value,
)*
}
}
}
impl From<$src> for String {
fn from(value: $src) -> Self {
let v: &'static str = value.into();
v.to_string()
}
}
};
}
impl_enum_to_str!(
Scheme {
{%- for name in srvs %}
#[cfg(feature = "{{ service_to_feature(name) }}")]
{{ service_to_pascal(name) }} => "{{ snake_to_kebab_case(name) }}",
{%- endfor %}
}
);