54 lines
1.4 KiB
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)
|
|
}
|