diff options
Diffstat (limited to 'vendor/unic-char-property/src/property.rs')
-rw-r--r-- | vendor/unic-char-property/src/property.rs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/vendor/unic-char-property/src/property.rs b/vendor/unic-char-property/src/property.rs new file mode 100644 index 000000000..47d367f4d --- /dev/null +++ b/vendor/unic-char-property/src/property.rs @@ -0,0 +1,48 @@ +// Copyright 2017 The UNIC Project Developers. +// +// See the COPYRIGHT file at the top-level directory of this distribution. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! Taxonomy and contracts for Character Property types. + +use core::fmt::Debug; +use core::hash::Hash; + +/// A Character Property, defined for some or all Unicode characters. +pub trait CharProperty: PartialCharProperty + Debug + Eq + Hash { + /// The *abbreviated name* of the property. + fn prop_abbr_name() -> &'static str; + + /// The *long name* of the property. + fn prop_long_name() -> &'static str; + + /// The *human-readable* name of the property. + fn prop_human_name() -> &'static str; +} + +/// A Character Property defined for some characters. +/// +/// Examples: `Decomposition_Type`, `Numeric_Type` +pub trait PartialCharProperty: Copy { + /// The property value for the character, or None. + fn of(ch: char) -> Option<Self>; +} + +/// A Character Property defined on all characters. +/// +/// Examples: `Age`, `Name`, `General_Category`, `Bidi_Class` +pub trait TotalCharProperty: PartialCharProperty + Default { + /// The property value for the character. + fn of(ch: char) -> Self; +} + +impl<T: TotalCharProperty> PartialCharProperty for T { + fn of(ch: char) -> Option<Self> { + Some(<Self as TotalCharProperty>::of(ch)) + } +} |