std_tools 0.1.4

Collection of general purpose tools for solving problems. Fundamentally extend the language without spoiling, so may be used solely or in conjunction with another module of such kind.
Documentation
//!
//! Work with bools.
//!

///
/// Get bool like value.
///

#[ derive( Debug, PartialEq ) ]
pub enum BoolLike
{
  /// Variant for true-like values.
  True,
  /// Variant for false-like values.
  False,
}

impl Default for BoolLike
{
  fn default() -> Self { BoolLike::False }
}

impl From< BoolLike > for bool
{
  fn from( bool_like : BoolLike ) -> Self
  {
    match bool_like
    {
      BoolLike::True => true,
      BoolLike::False => false,
    }
  }
}

///
/// Method to get bool like value from current type.
///

pub trait ToBoolLike
{
  /// Get bool like value.
  fn to_bool_like( &self ) -> BoolLike;
}

//

impl ToBoolLike for &str
{
  fn to_bool_like( &self ) -> BoolLike
  {
    let bool_like = match self.parse::< bool >()
    {
      Ok( x ) => if x { BoolLike::True } else { BoolLike::False },
      Err( _ ) =>
      {
        match self.parse::< i32 >()
        {
          Ok( y ) => if y == 1 { BoolLike::True } else { BoolLike::False },
          Err(_err) => BoolLike::False,
        }
      },
    };

    bool_like
  }
}

//

impl ToBoolLike for String
{
  fn to_bool_like( &self ) -> BoolLike
  {
    let bool_like = match self.parse::< bool >()
    {
      Ok( x ) => if x { BoolLike::True } else { BoolLike::False },
      Err( _ ) =>
      {
        match self.parse::< i32 >()
        {
          Ok( y ) => if y == 1 { BoolLike::True } else { BoolLike::False },
          Err( _err ) => BoolLike::False,
        }
      },
    };

    bool_like
  }
}