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