| // 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 %} |
| } |
| ); |