aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/program/aedifex/repository.lux
diff options
context:
space:
mode:
authorEduardo Julian2020-11-07 00:29:40 -0400
committerEduardo Julian2020-11-07 00:29:40 -0400
commit2e5852abb1ac0ae5abdd8709238aca447f62520e (patch)
tree1b73a24205217c9e00f7f17d5972f67735a7cc69 /stdlib/source/program/aedifex/repository.lux
parentef78c1f92ab29c4370193591b170535dd9e743f7 (diff)
Pure-Lux implementation for biggest and smallest Frac values.
Diffstat (limited to 'stdlib/source/program/aedifex/repository.lux')
-rw-r--r--stdlib/source/program/aedifex/repository.lux76
1 files changed, 74 insertions, 2 deletions
diff --git a/stdlib/source/program/aedifex/repository.lux b/stdlib/source/program/aedifex/repository.lux
index f92b1e5b9..0c8f92993 100644
--- a/stdlib/source/program/aedifex/repository.lux
+++ b/stdlib/source/program/aedifex/repository.lux
@@ -1,17 +1,23 @@
(.module:
[lux #*
+ ["." host (#+ import:)]
[abstract
[monad (#+ do)]]
[control
["." io (#+ IO)]
["." try (#+ Try)]
+ ["." exception (#+ exception:)]
[concurrency
["." promise (#+ Promise)]
["." stm]]]
[data
- [binary (#+ Binary)]]
+ [binary (#+ Binary)]
+ ["." text
+ ["%" format (#+ format)]
+ ["." encoding]]]
[world
- [net (#+ URL)]]]
+ [net (#+ URL)
+ ["." uri]]]]
["." // #_
["#." artifact (#+ Artifact)
["#/." extension (#+ Extension)]]])
@@ -83,3 +89,69 @@
(#try.Failure error)
(wrap (#try.Failure error))))))
)))
+
+(import: java/lang/AutoCloseable
+ (close [] #io #try void))
+
+(import: java/io/OutputStream
+ (flush [] #io #try void)
+ (write [[byte]] #io #try void))
+
+(import: java/lang/String)
+
+(import: java/net/URLConnection
+ (setDoOutput [boolean] #io #try void)
+ (setRequestProperty [java/lang/String java/lang/String] #io #try void)
+ (getOutputStream [] #io #try java/io/OutputStream))
+
+(import: java/net/HttpURLConnection
+ (setRequestMethod [java/lang/String] #io #try void)
+ (getResponseCode [] #io #try int))
+
+(import: java/net/URL
+ (new [java/lang/String])
+ (openConnection [] #io #try java/net/URLConnection))
+
+(import: java/util/Base64$Encoder
+ (encodeToString [[byte]] java/lang/String))
+
+(import: java/util/Base64
+ (#static getEncoder [] java/util/Base64$Encoder))
+
+(exception: #export (failure {code Int})
+ (exception.report
+ ["Code" (%.int code)]))
+
+(def: (basic-auth user password)
+ (-> User Password Text)
+ (format "Basic " (java/util/Base64$Encoder::encodeToString (encoding.to-utf8 (format user ":" password))
+ (java/util/Base64::getEncoder))))
+
+(def: (url address artifact extension)
+ (-> Address Artifact Extension URL)
+ (format address uri.separator (//artifact.uri artifact) extension))
+
+(structure: #export (default address)
+ (All [s] (-> Address (Repository IO)))
+
+ (def: (download artifact extension)
+ (io.io (#try.Failure "YOLO")))
+
+ (def: (upload [user password] artifact extension content)
+ (do (try.with io.monad)
+ [connection (|> (..url address artifact extension)
+ java/net/URL::new
+ java/net/URL::openConnection)
+ #let [connection (:coerce java/net/HttpURLConnection connection)]
+ _ (java/net/HttpURLConnection::setRequestMethod "PUT" connection)
+ _ (java/net/URLConnection::setDoOutput true connection)
+ _ (java/net/URLConnection::setRequestProperty "Authorization" (..basic-auth user password) connection)
+ stream (java/net/URLConnection::getOutputStream connection)
+ _ (java/io/OutputStream::write content stream)
+ _ (java/io/OutputStream::flush stream)
+ _ (java/lang/AutoCloseable::close stream)
+ code (java/net/HttpURLConnection::getResponseCode connection)]
+ (case code
+ +200 (wrap [])
+ _ (:: io.monad wrap (exception.throw ..failure [code])))))
+ )