package mo

import (
	"go.mongodb.org/mongo-driver/v2/bson"
)

// ToD 将 D 转换为 M, 或 ToM 将 M 转换为 D
// MongoDB Go Driver 2.0 不支持直接从 D 转换为 M. 所以, 用户应该使用 bson.Marshal 将 D 编组为 BSON, 并使用 bson.Unmarshal 将其解编为 M.
func ToD(m M) (d D, err error) {
	b, err := bson.Marshal(m)
	if err != nil {
		return D{}, err
	}
	return d, bson.Unmarshal(b, &d)
}

func ToM(d D) (m M, err error) {
	b, err := bson.Marshal(d)
	if err != nil {
		return M{}, err
	}
	return m, bson.Unmarshal(b, &m)
}

// ToDFast 等同于 ToD 但不返回错误
func ToDFast(m M) D {
	d, _ := ToD(m)
	return d
}

// ToMFast 等同于 ToM 但不返回错误
func ToMFast(d D) M {
	m, _ := ToM(d)
	return m
}
