message SlowChild {
    optional string id = 1;
}

/**
 * @Indexed
 */
message FastChild {

    /**
      * @Basic(projectable = true)
      */
    optional string id = 1;
}

/**
 * @Indexed
 */
message FieldLessChild {

    optional string id = 1;
}

/**
 * @Indexed
 */
message Parent {

    optional string id = 1;

    /**
     * @Basic(projectable = true)
     */
    optional string name = 2;

    repeated SlowChild slowChildren = 3;

    /**
     * @Embedded
     */
    repeated FastChild fastChildren = 4;

    /**
    * @Embedded
    */
    repeated FieldLessChild fieldLessChildren = 5;

    message NotIndexedWithFieldChild {
      /**
        * @Basic(projectable = true)
        */
      optional string id = 1;
    }

    /**
      * @Embedded
      */
    optional NotIndexedWithFieldChild notIndexedWithFieldChild = 6;
}
