// Code generated by id-generate.go DO NOT EDIT.

package {{.PkgName}}

import "go.mongodb.org/mongo-driver/bson"
import "go.mongodb.org/mongo-driver/bson/bsontype"
import "go.mongodb.org/mongo-driver/bson/primitive"
import "gogs.mikescher.com/BlackForestBytes/goext/exerr"

const ChecksumIDGenerator = "{{.Checksum}}" // GoExtVersion: {{.GoextVersion}}

{{range .IDs}}

// ================================ {{.Name}} ({{.FileRelative}}) ================================

func (i {{.Name}}) MarshalBSONValue() (bsontype.Type, []byte, error) {
	if objId, err := primitive.ObjectIDFromHex(string(i)); err == nil {
		return bson.MarshalValue(objId)
	} else {
		return 0, nil, exerr.New(exerr.TypeMarshalEntityID, "Failed to marshal {{.Name}}("+i.String()+") to ObjectId").Str("value", string(i)).Type("type", i).Build()
	}
}

func (i {{.Name}}) String() string {
	return string(i)
}

func (i {{.Name}}) ObjID() (primitive.ObjectID, error) {
	return primitive.ObjectIDFromHex(string(i))
}

func (i {{.Name}}) Valid() bool {
	_, err := primitive.ObjectIDFromHex(string(i))
	return err == nil
}

{{if ne $.AnyDef nil}}
func (i {{.Name}}) AsAny() {{$.AnyDef.Name}} {
	return {{$.AnyDef.Name}}(i)
}
{{end}}

func New{{.Name}}() {{.Name}} {
	return {{.Name}}(primitive.NewObjectID().Hex())
}

{{end}}