mirror of
https://github.com/ElnuDev/rust-jmdict.git
synced 2025-05-12 01:45:52 -07:00
add all_variants, from_constant_name to trait Enum
This commit is contained in:
parent
ba8cfff126
commit
c4f646d556
3 changed files with 36 additions and 0 deletions
|
@ -12,6 +12,11 @@ JMdict was updated to 2021-09-17. This requires the following changes in enum va
|
||||||
- added `SenseTopic::Psychiatry`
|
- added `SenseTopic::Psychiatry`
|
||||||
- added `SenseTopic::Railway`
|
- added `SenseTopic::Railway`
|
||||||
|
|
||||||
|
Further changes:
|
||||||
|
|
||||||
|
- The `all_variants()` method was added to `trait Enum`.
|
||||||
|
- The `from_constant_name()` method was added to `trait Enum`.
|
||||||
|
|
||||||
# v1.0.0 (2021-04-18)
|
# v1.0.0 (2021-04-18)
|
||||||
|
|
||||||
Initial stable release. No changes from v0.99.1.
|
Initial stable release. No changes from v0.99.1.
|
||||||
|
|
|
@ -439,6 +439,28 @@ fn process(e: Enum) -> String {
|
||||||
lines.push(" }".into());
|
lines.push(" }".into());
|
||||||
lines.push(" }\n".into());
|
lines.push(" }\n".into());
|
||||||
|
|
||||||
|
//fn from_constant_name(&str) -> Self
|
||||||
|
lines.push(" fn from_constant_name(text: &str) -> Option<Self> {".into());
|
||||||
|
lines.push(" match text {".into());
|
||||||
|
for v in e.variants.iter().filter(|v| v.enabled) {
|
||||||
|
lines.push(format!(
|
||||||
|
" \"{}\" => Some({}::{}),",
|
||||||
|
v.name, e.name, v.name
|
||||||
|
));
|
||||||
|
}
|
||||||
|
lines.push(" _ => None,".into());
|
||||||
|
lines.push(" }".into());
|
||||||
|
lines.push(" }\n".into());
|
||||||
|
|
||||||
|
//fn all_variants() -> &'static [Self]
|
||||||
|
lines.push(" fn all_variants() -> &'static [Self] {".into());
|
||||||
|
lines.push(" &[".into());
|
||||||
|
for v in e.variants.iter().filter(|v| v.enabled) {
|
||||||
|
lines.push(format!(" {}::{},", e.name, v.name));
|
||||||
|
}
|
||||||
|
lines.push(" ]".into());
|
||||||
|
lines.push(" }\n".into());
|
||||||
|
|
||||||
//end impl Enum
|
//end impl Enum
|
||||||
lines.push("}\n".into());
|
lines.push("}\n".into());
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,10 @@ pub trait EnumPayload {
|
||||||
|
|
||||||
///Common methods provided by all enums in this crate.
|
///Common methods provided by all enums in this crate.
|
||||||
pub trait Enum: Sized {
|
pub trait Enum: Sized {
|
||||||
|
///Returns a list of all variant values in this enum. No particular order is guaranteed or
|
||||||
|
///implied.
|
||||||
|
fn all_variants() -> &'static [Self];
|
||||||
|
|
||||||
///Returns the string that marks this enum variant in the JMdict. For values that JMdict
|
///Returns the string that marks this enum variant in the JMdict. For values that JMdict
|
||||||
///represents as XML entities, only the entity name is returned, e.g. `adj-n` instead of
|
///represents as XML entities, only the entity name is returned, e.g. `adj-n` instead of
|
||||||
///`&adj-n;`.
|
///`&adj-n;`.
|
||||||
|
@ -55,6 +59,11 @@ pub trait Enum: Sized {
|
||||||
///Returns the variant name. This is used to generate Rust code for this enum. The `impl
|
///Returns the variant name. This is used to generate Rust code for this enum. The `impl
|
||||||
///Display` for enums uses this same representation.
|
///Display` for enums uses this same representation.
|
||||||
fn constant_name(&self) -> &'static str;
|
fn constant_name(&self) -> &'static str;
|
||||||
|
|
||||||
|
///Returns the variant that is identified the given name in Rust code, or `None` if there is no
|
||||||
|
///such variant. This is the reverse of `self.constant_name()`, i.e.
|
||||||
|
///`Self::from_constant_name(self.constant_name()) == Some(self)`.
|
||||||
|
fn from_constant_name(name: &str) -> Option<Self>;
|
||||||
}
|
}
|
||||||
|
|
||||||
///PriorityInCorpus appears in struct [Priority]. It describes how often a dictionary entry
|
///PriorityInCorpus appears in struct [Priority]. It describes how often a dictionary entry
|
||||||
|
|
Loading…
Add table
Reference in a new issue