anchor.diff:      doc_type: String,
       doc:      Option<Json>,
       id:       Option<String>
  +}
  +
  +impl Doc {
  +    pub fn from_doc<A, B>(index: A, doc_type: B, doc: Json) -> Doc
  +        where A: Into<String>, B: Into<String>
  +    {
  +        Doc {
  +            index:    index.into(),
  +            doc_type: doc_type.into(),
  +            doc:      Some(doc),
  +            id:       None
  +        }
  +    }
  +
  +    pub fn id<A, B, C>(index: A, doc_type: B, id: C) -> Doc
  +        where A: Into<String>, B: Into<String>, C: Into<String>
  +    {
  +        Doc {
  +            index:    index.into(),
  +            doc_type: doc_type.into(),
  +            doc:      None,
  +            id:       Some(id.into())
  +        }
  +    }
   }
   
   impl ToJson for Doc {
  
positive.code:     RandomAccessAlways
  }
  
  impl ToJson for Strategy {
      fn to_json(&self) -> Json {
          match self {
  
negative.code: 
  #[derive(Clone)]
  pub struct IndexedShape {
      id:       String,
      doc_type: String,
      index:    String,
      path:     String
  }
  
  impl IndexedShape {
      pub fn new<A, B, C, D>(id: A, doc_type: B, index: C, path: D) -> IndexedShape
          where A: Into<String>,
                B: Into<String>,
                C: Into<String>,
                D: Into<String>
      {
          IndexedShape {
              id: id.into(),
              doc_type: doc_type.into(),
              index: index.into(),
              path: path.into()
          }
      }
  }
  
  impl ToJson for IndexedShape {
  