summaryrefslogtreecommitdiff
path: root/engine/Components/Packages/Package.go
diff options
context:
space:
mode:
Diffstat (limited to 'engine/Components/Packages/Package.go')
-rw-r--r--engine/Components/Packages/Package.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/engine/Components/Packages/Package.go b/engine/Components/Packages/Package.go
new file mode 100644
index 0000000..51e2a80
--- /dev/null
+++ b/engine/Components/Packages/Package.go
@@ -0,0 +1,42 @@
+package packages
+
+import (
+ "fmt"
+ "os"
+
+ settings "github.com/DegustatorPonos/RuinesOfRafdolon/Settings"
+)
+
+type PackageDescription struct {
+ Name string `json:"name"`
+ Version uint64 `json:"version"`
+ Type string `json:"type"`
+}
+
+type Package struct {
+ Description PackageDescription `json:"description"`
+}
+
+func ReadPackage(dir os.DirEntry) (*Package, error) {
+ var dirPath = ConcantinateFileLocation(settings.Current.PackagesLocation, dir.Name())
+ var desc = PackageDescription{}
+ if descErr := ReadJSONfromFile(ConcantinateFileLocation(dirPath, "Description.json"), &desc); descErr != nil {
+ return nil, descErr
+ }
+ if descErr := desc.Validate(); descErr != nil {
+ return nil, fmt.Errorf("Failed to parse descriptor: %s", descErr.Error())
+ }
+ return &Package{
+ Description: desc,
+ }, nil
+}
+
+func (base *PackageDescription) Validate() error {
+ if base.Name == "" {
+ return fmt.Errorf("Invalid package descriptor: the name cannot be empty")
+ }
+ if base.Version == 0{
+ return fmt.Errorf("Invalid package descriptor: the version cannot be 0")
+ }
+ return nil
+}