we should arrange things so that the following macro can be affixed to a struct marked AIDescriptor 
this will automatically derive `Display` simply by calling x.ai() since our type can already do `AIDescriptor`
#[ai(Display)]

here is what we can affix to a struct field:
#[ai(none="Here is the piece we include in the ai string in the case we have a null option")]

we should be able to handle cases like this:

#[derive(Default,AIDescriptor,Debug,Clone,Serialize,Deserialize,PartialEq,Eq)]
#[ai(Display)]
pub struct LyricalMeter {
    foot:   MetricalFoot,

    #[ai(none="The number of feet per line is flexible.")]
    line_length: Option<LineLength>,
}

this should work if MetricalFoot and LineLength implement AIDescriptor
if `line_length` is none, the none="" message should be displayed during the `ai` call

we also want to handle cases like this:

#[derive(AIDescriptor,Debug,Clone,Serialize,Deserialize,PartialEq,Eq)]
#[ai(Display)]
pub enum Meter {

    Standard(LyricalMeter),

    Other(OtherMeter),
}

this should work as long as LyricalMeter and OtherMeter both implement AIDescriptor
