JCS-pub/common/pkgs/storage/pubshards/pubshards.go

54 lines
1.4 KiB
Go

package pubshards
import (
"gitlink.org.cn/cloudream/jcs-pub/common/pkgs/storage/factory/reg"
"gitlink.org.cn/cloudream/jcs-pub/common/pkgs/storage/types"
jcstypes "gitlink.org.cn/cloudream/jcs-pub/common/types"
)
func init() {
reg.RegisterBuilder[*jcstypes.PubShardsType](newBuilder)
}
type builder struct {
types.EmptyBuilder
detail *jcstypes.UserSpaceDetail
}
func newBuilder(detail *jcstypes.UserSpaceDetail) types.StorageBuilder {
return &builder{
detail: detail,
}
}
func (b *builder) FeatureDesc() types.FeatureDesc {
return types.FeatureDesc{}
}
func (b *builder) CreateShardStore(typeOnly bool) (types.ShardStore, error) {
stgType := b.detail.UserSpace.Storage.(*jcstypes.PubShardsType)
if typeOnly {
return (*ShardStore)(nil), nil
}
return NewShardStore(b.detail, stgType)
}
func (b *builder) CreateBaseStore(typeOnly bool) (types.BaseStore, error) {
stgType := b.detail.UserSpace.Storage.(*jcstypes.PubShardsType)
newDeatil := jcstypes.UserSpaceDetail{
UserID: b.detail.UserID,
UserSpace: jcstypes.UserSpace{
Storage: stgType.Base,
Credential: b.detail.UserSpace.Credential,
ShardStore: b.detail.UserSpace.ShardStore,
Features: b.detail.UserSpace.Features,
WorkingDir: b.detail.UserSpace.WorkingDir,
},
RecommendHub: b.detail.RecommendHub,
}
blder := reg.GetBuilderInternal(&newDeatil)
return blder.CreateBaseStore(typeOnly)
}