aboutsummaryrefslogtreecommitdiff
path: root/CLPM
diff options
context:
space:
mode:
Diffstat (limited to 'CLPM')
-rw-r--r--CLPM/Package.dcl58
-rw-r--r--CLPM/Package.icl58
2 files changed, 116 insertions, 0 deletions
diff --git a/CLPM/Package.dcl b/CLPM/Package.dcl
new file mode 100644
index 0000000..2a476a7
--- /dev/null
+++ b/CLPM/Package.dcl
@@ -0,0 +1,58 @@
+definition module CLPM.Package
+
+from StdFile import class <<<
+
+from Data.Maybe import :: Maybe
+from Text.JSON import :: JSONNode, generic JSONEncode, generic JSONDecode
+
+:: StoredPackage
+ = { name :: Maybe PackageName
+ , desc :: Maybe Description
+ , author :: Maybe Author
+ , url :: Maybe Url
+ , depends :: Maybe [StoredDependency]
+ }
+
+:: StoredDependency :== (PackageName, StoredPackageSource)
+:: StoredPackageSource :== String
+
+:: Package
+ = { name :: PackageName
+ , desc :: Description
+ , author :: Author
+ , url :: Url
+ , depends :: [Dependency]
+ }
+
+:: Dependency
+ = { dep_name :: PackageName
+ , dep_source :: PackageSource
+ }
+
+:: PackageSource
+ = GitHub String String GitTag
+ | Git Url GitTag
+ | Download Url
+
+:: PackageName :== String
+:: Description :== String
+:: Author :== String
+:: Url :== String
+
+:: GitTag
+ = Commit String
+ | Tag String
+ | Latest
+
+derive JSONEncode StoredPackage
+derive JSONDecode StoredPackage
+
+instance <<< Package
+
+toPackage :: StoredPackage -> Package
+toStoredPackage :: Package -> StoredPackage
+
+DEFAULT_NAME :== "Unnamed package"
+DEFAULT_DESC :== "Empty description"
+DEFAULT_AUTHOR :== "Unknown author"
+DEFAULT_URL :== "http://clean.cs.ru.nl"
diff --git a/CLPM/Package.icl b/CLPM/Package.icl
new file mode 100644
index 0000000..06fae3f
--- /dev/null
+++ b/CLPM/Package.icl
@@ -0,0 +1,58 @@
+implementation module CLPM.Package
+
+import _SystemArray
+import StdFile
+import StdList
+
+import Control.Applicative
+from Data.Func import $
+from Text import class Text(indexOf,subString),
+ instance Text String, instance + String
+import Text.JSON
+
+derive JSONEncode StoredPackage
+derive JSONDecode StoredPackage
+
+toPackage :: StoredPackage -> Package
+toPackage spkg
+ = { Package
+ | name = fromJust $ spkg.StoredPackage.name <|> Just DEFAULT_NAME
+ , desc = fromJust $ spkg.StoredPackage.desc <|> Just DEFAULT_DESC
+ , author = fromJust $ spkg.StoredPackage.author <|> Just DEFAULT_AUTHOR
+ , url = fromJust $ spkg.StoredPackage.url <|> Just DEFAULT_URL
+ , depends = map toDep $ fromJust $ spkg.StoredPackage.depends <|> Just []
+ }
+where
+ toDep :: StoredDependency -> Dependency
+ toDep (name, src)
+ = { dep_name = name, dep_source = toPackSource src }
+
+ toPackSource :: StoredPackageSource -> PackageSource
+ toPackSource sps = GitHub owner repo Latest
+ where
+ owner = subString 0 slash sps
+ repo = subString (slash + 1) (size sps - 1) sps
+ slash = indexOf "/" sps
+
+toStoredPackage :: Package -> StoredPackage
+toStoredPackage pkg
+ = { StoredPackage
+ | name = Just pkg.Package.name
+ , desc = Just pkg.Package.desc
+ , author = Just pkg.Package.author
+ , url = Just pkg.Package.url
+ , depends = case map toStoredDep pkg.Package.depends of
+ [] = Nothing
+ ds = Just ds
+ }
+where
+ toStoredDep :: Dependency -> StoredDependency
+ toStoredDep d = (d.dep_name, toStoredPackSource d.dep_source)
+
+ toStoredPackSource :: PackageSource -> StoredPackageSource
+ toStoredPackSource (GitHub o r t) = o + "/" + r
+ // TODO
+
+instance <<< Package
+where
+ (<<<) f p = f <<< (jsonPrettyPrint $ toJSON $ toStoredPackage p)