[][src]Type Definition core_extensions::type_level_bool::IfElse

type IfElse<Cond, Then, Else> = <IfElseOp<Cond, Then, Else> as BooleanOp>::Value;

Type level conditional.

if Cond==True the type is Then.

if Cond==False the type is Else.

This will be more ergonomic once specialization is stable.

Example

use core_extensions::type_level_bool::{IfElse,True,False};
let a:IfElse<True ,i32,&str>=0;
let b:IfElse<False,i32,&str>="type level conditionals";

Example of field whose type depends on a Boolean.

Currently it is necessary to add a where clause to the type containing a conditional field, this limitation will be lifted once specialization is stable.

use core_extensions::VariantPhantom;
use core_extensions::type_level_bool::{IfElse,Boolean,False,True};
use core_extensions::type_level_bool::internals::{IfElseOp,BooleanOp};

struct Conditional<ZST>
where
    IfElseOp<ZST,&'static str,usize>:BooleanOp,
{
    pub value:IfElse<ZST,&'static str,usize>,
    pub cond:ZST,
}

let string_=Conditional{ value:"wtf" ,cond:True  };
let int_   =Conditional{ value:99    ,cond:False };

// The 2 lines bellow won't compile.
// let string_=Conditional{ value:"wtf",cond:False };
// let int_   =Conditional{ value:99   ,cond:True };