Skip to content
Snippets Groups Projects
Commit 88ab1a6d authored by Pavel Antonov's avatar Pavel Antonov :asterisk:
Browse files

WIP

parent 101b5ac2
No related branches found
No related tags found
No related merge requests found
...@@ -13,7 +13,7 @@ type CollectionID struct { ...@@ -13,7 +13,7 @@ type CollectionID struct {
func (t *CollectionID) Type() string { return Collection } func (t *CollectionID) Type() string { return Collection }
func (t *CollectionID) String() string { func (t *CollectionID) String() string {
return Join(t.EnvironmentID.String(), t.CollectionID) return Join(t.EnvironmentID.String(), CollectionsPrefix, t.CollectionID)
} }
func (t *CollectionID) ToMap() map[string]any { func (t *CollectionID) ToMap() map[string]any {
...@@ -30,22 +30,6 @@ func (t *CollectionID) FromMap(m map[string]any) error { ...@@ -30,22 +30,6 @@ func (t *CollectionID) FromMap(m map[string]any) error {
return nil return nil
} }
func (t *CollectionID) FromString(id string) error {
parts := Split(id)
return t.fromParts(parts)
}
func (t *CollectionID) fromParts(parts []string) error {
if err := t.EnvironmentID.fromParts(parts); err != nil {
return err
}
if len(parts) < 6 || parts[4] != CollectionsPrefix {
return ErrInvalidID
}
t.CollectionID = parts[5]
return nil
}
func (t *CollectionID) Validate() error { func (t *CollectionID) Validate() error {
if t.CollectionID == "" { if t.CollectionID == "" {
return ErrInvalidID return ErrInvalidID
...@@ -53,3 +37,19 @@ func (t *CollectionID) Validate() error { ...@@ -53,3 +37,19 @@ func (t *CollectionID) Validate() error {
return t.EnvironmentID.Validate() return t.EnvironmentID.Validate()
} }
func parseCollectionID(parts []string) (*CollectionID, error) {
if len(parts) != 6 || parts[0] != EnvironmentsPrefix {
return nil, ErrInvalidID
}
envID, err := parseEnvironmentID(parts[:4])
if err != nil {
return nil, err
}
var id CollectionID
id.CollectionID = parts[5]
id.EnvironmentID = *envID
return &id, nil
}
...@@ -13,7 +13,10 @@ type EnvironmentID struct { ...@@ -13,7 +13,10 @@ type EnvironmentID struct {
func (t *EnvironmentID) Type() string { return Environment } func (t *EnvironmentID) Type() string { return Environment }
func (t *EnvironmentID) String() string { func (t *EnvironmentID) String() string {
return Join(t.SpaceID.String(), t.EnvironmentID) return Join(t.SpaceID.String(),
EnvironmentsPrefix, t.EnvironmentID,
)
} }
func (t *EnvironmentID) ToMap() map[string]any { func (t *EnvironmentID) ToMap() map[string]any {
...@@ -30,22 +33,6 @@ func (t *EnvironmentID) FromMap(m map[string]any) error { ...@@ -30,22 +33,6 @@ func (t *EnvironmentID) FromMap(m map[string]any) error {
return nil return nil
} }
func (t *EnvironmentID) FromString(id string) error {
parts := Split(id)
return t.fromParts(parts)
}
func (t *EnvironmentID) fromParts(parts []string) error {
if err := t.SpaceID.fromParts(parts); err != nil {
return err
}
if len(parts) < 4 || parts[2] != EnvironmentsPrefix {
return ErrInvalidID
}
t.EnvironmentID = parts[3]
return nil
}
func (t *EnvironmentID) Validate() error { func (t *EnvironmentID) Validate() error {
if t.EnvironmentID == "" { if t.EnvironmentID == "" {
return ErrInvalidID return ErrInvalidID
...@@ -53,3 +40,19 @@ func (t *EnvironmentID) Validate() error { ...@@ -53,3 +40,19 @@ func (t *EnvironmentID) Validate() error {
return t.SpaceID.Validate() return t.SpaceID.Validate()
} }
func parseEnvironmentID(parts []string) (*EnvironmentID, error) {
if len(parts) != 4 || parts[2] != EnvironmentsPrefix {
return nil, ErrInvalidID
}
spaceID, err := parseSpaceID(parts[:2])
if err != nil {
return nil, err
}
var id EnvironmentID
id.EnvironmentID = parts[3]
id.SpaceID = *spaceID
return &id, nil
}
...@@ -13,11 +13,30 @@ type ID interface { ...@@ -13,11 +13,30 @@ type ID interface {
String() string String() string
Type() string Type() string
ToMap() map[string]any ToMap() map[string]any
FromString(string) error
FromMap(map[string]any) error FromMap(map[string]any) error
Validate() error Validate() error
} }
func Parse(s string) (ID, error) {
parts := Split(s)
// TODO: Парсим строку, от коротких к длинным
if id, err := parseSpaceID(parts); err != nil {
return id, nil
}
if id, _ := parseEnvironmentID(parts); id != nil {
return id, nil
}
if id, _ := parseCollectionID(parts); id != nil {
return id, nil
}
return nil, ErrInvalidID
}
func Split(id string) []string { func Split(id string) []string {
if id[0] != Separator { if id[0] != Separator {
return nil return nil
......
package id package id
// Сохранение/чтение в JSON (в строку) // TODO: Сохранение/чтение в JSON (в строку)
...@@ -26,22 +26,19 @@ func (t *SpaceID) FromMap(m map[string]any) error { ...@@ -26,22 +26,19 @@ func (t *SpaceID) FromMap(m map[string]any) error {
return nil return nil
} }
func (t *SpaceID) FromString(id string) error { func (t *SpaceID) Validate() error {
parts := Split(id) if t.SpaceID == "" {
return t.fromParts(parts)
}
func (t *SpaceID) fromParts(parts []string) error {
if len(parts) < 2 || parts[0] != SpacesPrefix {
return ErrInvalidID return ErrInvalidID
} }
t.SpaceID = parts[1]
return nil return nil
} }
func (t *SpaceID) Validate() error { func parseSpaceID(parts []string) (*SpaceID, error) {
if t.SpaceID == "" { var id SpaceID
return ErrInvalidID if len(parts) != 2 || parts[0] != SpacesPrefix {
return nil, ErrInvalidID
} }
return nil
id.SpaceID = parts[1]
return &id, nil
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment