diff options
| author | 2023-03-24 14:49:00 -0400 | |
|---|---|---|
| committer | 2023-03-24 14:49:00 -0400 | |
| commit | b7a993eeceb746877230917d02b1937217d17ad4 (patch) | |
| tree | 356836134fdca3ce126095073e1168f24f787af0 | |
| parent | native: fix warning (diff) | |
janet: add writer helper module
| -rw-r--r-- | jurl/writer.janet | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/jurl/writer.janet b/jurl/writer.janet new file mode 100644 index 0000000..589271e --- /dev/null +++ b/jurl/writer.janet @@ -0,0 +1,39 @@ +# writer.janet: utility for consistent :readfunction and mime :data-cb use +(defn- read-cb + [self bytes] + (def start (self :pos)) + (def end (min (length (self :buf)) (+ (self :pos) bytes))) + (put self :pos end) + (string/slice (self :buf) start end)) + +# no safety checks, just for fun +(defn- seek-cb + [self offset &opt pos] + (default pos :set) + (put self :pos (case pos + :set offset + :cur (+ (self :pos) offset) + :end (- (length (self :buf)) offset)))) + +(defn- make-buf + [b] + (assert (bytes? b)) + (def buf (freeze b)) + @{:pos 0 + :buf buf + :read read-cb + :seek seek-cb}) + +# returns a function you can put into :readfunction +(defn make-writer + [b] + (def buf (make-buf b)) + |(:read buf $)) + +# returns a function you can put into mime_data_cb +(defn make-mime-writer + [b] + (def buf (make-buf b)) + (fn [mode & args] + (assert (keyword? mode)) + (mode buf ;args))) |
