func saveDoc(src interface{}) (*pb.Document, error) {
	var err error
	var fields []Field
	var meta *DocumentMetadata
	switch x := src.(type) {
	case FieldLoadSaver:
		fields, meta, err = x.Save()
	default:
		fields, meta, err = saveStructWithMeta(src)
	}
	if err != nil {
		return nil, err
	}

	fieldsProto, err := fieldsToProto(fields)
	if err != nil {
		return nil, err
	}
	d := &pb.Document{
		Field:         fieldsProto,
		OrderId:       proto.Int32(int32(time.Since(orderIDEpoch).Seconds())),
		OrderIdSource: pb.Document_DEFAULTED.Enum(),
	}
	if meta != nil {
		if meta.Rank != 0 {
			if !validDocRank(meta.Rank) {
				return nil, fmt.Errorf("search: invalid rank %d, must be [0, 2^31)", meta.Rank)
			}
			*d.OrderId = int32(meta.Rank)
			d.OrderIdSource = pb.Document_SUPPLIED.Enum()
		}
		if len(meta.Facets) > 0 {
			facets, err := facetsToProto(meta.Facets)
			if err != nil {
				return nil, err
			}
			d.Facet = facets
		}
	}
	return d, nil
}
func saveDoc(src interface{}) (*pb.Document, error) {
	var err error
	var fields []Field
	var meta *DocumentMetadata
	switch x := src.(type) {
	case FieldLoadSaver:
		fields, meta, err = x.Save()
	default:
		fields, meta, err = saveStructWithMeta(src)
	}
	if err != nil {
		return nil, err
	}

	fieldsProto, err := fieldsToProto(fields)
	if err != nil {
		return nil, err
	}
	d := &pb.Document{
		Field:         fieldsProto,
		OrderId:       proto.Int32(int32(time.Since(orderIDEpoch).Seconds())),
		OrderIdSource: pb.Document_DEFAULTED.Enum(),
	}
	if meta != nil {
		if meta.Rank != 0 {
			if !validDocRank(meta.Rank) {
				return nil, fmt.Errorf("search: invalid rank %d, must be [0, 2^31)", meta.Rank)
			}
			*d.OrderId = int32(meta.Rank)
			d.OrderIdSource = pb.Document_SUPPLIED.Enum()
		}
		if len(meta.Facets) > 0 {
			facets, err := facetsToProto(meta.Facets)
			if err != nil {
				return nil, err
			}
			d.Facet = facets
		}
	}
	return d, nil
}
func saveDoc ( src interface { } ) ( * pb . Document , error ) { var err error var fields [ ] Field var meta * DocumentMetadata switch x := src . ( type ) { case FieldLoadSaver : fields , meta , err = x . Save ( ) default : fields , meta , err = saveStructWithMeta ( src ) } if err != nil { return nil , err } fieldsProto , err := fieldsToProto ( fields ) if err != nil { return nil , err } d := & pb . Document { Field : fieldsProto , OrderId : proto . Int32 ( int32 ( time . Since ( orderIDEpoch ) . Seconds ( ) ) ) , OrderIdSource : pb . Document_DEFAULTED . Enum ( ) , } if meta != nil { if meta . Rank != 0 { if ! validDocRank ( meta . Rank ) { return nil , fmt . Errorf ( " " , meta . Rank ) } * d . OrderId = int32 ( meta . Rank ) d . OrderIdSource = pb . Document_SUPPLIED . Enum ( ) } if len ( meta . Facets ) > 0 { facets , err := facetsToProto ( meta . Facets ) if err != nil { return nil , err } d . Facet = facets } } return d , nil }
// saveDoc converts from a struct pointer or
// FieldLoadSaver/FieldMetadataLoadSaver to the Document protobuf.
saveDoc converts from a struct pointer or FieldLoadSaver / FieldMetadataLoadSaver to the Document protobuf .