Skip to content
This repository was archived by the owner on Dec 17, 2025. It is now read-only.

Commit f6cbfcf

Browse files
committed
move things around a bit, rename
1 parent d58fd92 commit f6cbfcf

File tree

10 files changed

+175
-131
lines changed

10 files changed

+175
-131
lines changed

README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
# gbase32
1+
# gbase32_clockwork
22

3-
[![Package Version](https://img.shields.io/hexpm/v/gbase32)](https://hex.pm/packages/gbase32)
4-
[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/gbase32/)
3+
[![Package Version](https://img.shields.io/hexpm/v/gbase32_clockwork)](https://hex.pm/packages/gbase32_clockwork)
4+
[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/gbase32_clockwork/)
55

66
```sh
7-
gleam add gbase32
7+
gleam add gbase32_clockwork
88
```
99
```gleam
10-
import gbase32
10+
import gbase32_clockwork
1111
1212
pub fn main() {
1313
// TODO: An example of the project in use
1414
}
1515
```
1616

17-
Further documentation can be found at <https://hexdocs.pm/gbase32>.
17+
Further documentation can be found at <https://hexdocs.pm/gbase32_clockwork>.
1818

1919
## Development
2020

gleam.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name = "gbase32"
1+
name = "gbase32_clockwork"
22
version = "1.0.0"
33
gleam = ">= 0.32.0"
44

@@ -15,7 +15,6 @@ gleam = ">= 0.32.0"
1515

1616
[dependencies]
1717
gleam_stdlib = "~> 0.34 or ~> 1.0"
18-
glearray = "~> 0.2"
1918

2019
[dev-dependencies]
2120
gleeunit = "~> 1.0"

manifest.toml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,9 @@
33

44
packages = [
55
{ name = "gleam_stdlib", version = "0.36.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "C0D14D807FEC6F8A08A7C9EF8DFDE6AE5C10E40E21325B2B29365965D82EB3D4" },
6-
{ name = "glearray", version = "0.2.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "glearray", source = "hex", outer_checksum = "908154F695D330E06A37FAB2C04119E8F315D643206F8F32B6A6C14A8709FFF4" },
76
{ name = "gleeunit", version = "1.0.2", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "D364C87AFEB26BDB4FB8A5ABDE67D635DC9FA52D6AB68416044C35B096C6882D" },
87
]
98

109
[requirements]
1110
gleam_stdlib = { version = "~> 0.34 or ~> 1.0" }
12-
glearray = { version = "~> 0.2"}
1311
gleeunit = { version = "~> 1.0" }

src/gbase32/codebook.gleam

Lines changed: 0 additions & 16 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,35 @@
11
import gleam/string
22
import gleam/iterator.{Next}
3-
import gleam/dict
43
import gleam/list
5-
import gbase32/codebook.{
6-
type CodeBook, type DecodeBook, type EncodeBook, type Options, CodeBook,
7-
Lowercase,
4+
import gleam/dict
5+
import gbase32_clockwork/encoder.{decode, encode}
6+
import gbase32_clockwork/options.{type Options, Lowercase}
7+
import gbase32_clockwork/codebook.{
8+
type CodeBook, type DecodeBook, type DecodeFn, type EncodeBook, type EncodeFn,
9+
CodeBook,
810
}
911

10-
pub const clockwork = "0123456789ABCDEFGHJKMNPQRSTVWXYZ"
12+
const clockwork_codebook = "0123456789abcdefghjkmnpqrstvwxyz"
1113

1214
pub fn new(options options: List(Options)) -> CodeBook {
1315
let clockwork_case = case list.contains(options, Lowercase) {
1416
True ->
15-
clockwork
17+
clockwork_codebook
1618
|> string.lowercase
17-
False -> clockwork
19+
False ->
20+
clockwork_codebook
21+
|> string.uppercase
1822
}
1923

20-
let encoder: EncodeBook =
24+
let encodebook: EncodeBook =
2125
clockwork_case
2226
|> string.to_graphemes()
2327
|> iterator.from_list()
2428
|> iterator.transform(0, fn(i, el) { Next(#(i, el), i + 1) })
2529
|> iterator.to_list()
2630
|> dict.from_list()
2731

28-
let decoder_lower: DecodeBook =
32+
let decodebook_lower: DecodeBook =
2933
clockwork_case
3034
|> string.lowercase()
3135
|> string.to_graphemes()
@@ -34,8 +38,8 @@ pub fn new(options options: List(Options)) -> CodeBook {
3438
|> iterator.to_list()
3539
|> dict.from_list()
3640

37-
let decoder_upper: DecodeBook =
38-
clockwork
41+
let decodebook_upper: DecodeBook =
42+
clockwork_codebook
3943
|> string.uppercase()
4044
|> string.to_graphemes()
4145
|> iterator.from_list()
@@ -44,7 +48,7 @@ pub fn new(options options: List(Options)) -> CodeBook {
4448
|> dict.from_list()
4549

4650
// add aliases
47-
let decoder_updates =
51+
let decodebook_updates =
4852
dict.from_list([
4953
#("O", 0),
5054
#("o", 0),
@@ -54,10 +58,13 @@ pub fn new(options options: List(Options)) -> CodeBook {
5458
#("l", 1),
5559
])
5660

57-
let decoder =
58-
decoder_lower
59-
|> dict.merge(decoder_upper)
60-
|> dict.merge(decoder_updates)
61+
let decodebook =
62+
decodebook_lower
63+
|> dict.merge(decodebook_upper)
64+
|> dict.merge(decodebook_updates)
65+
66+
let encode_fn: EncodeFn = encode(encodebook, _)
67+
let decode_fn: DecodeFn = decode(decodebook, _)
6168

62-
CodeBook(encoder: encoder, decoder: decoder, options: options)
69+
CodeBook(encode: encode_fn, decode: decode_fn, options: options)
6370
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import gleam/dict.{type Dict}
2+
import gbase32_clockwork/options.{type Options}
3+
4+
pub type EncodeBook =
5+
Dict(Int, String)
6+
7+
pub type DecodeBook =
8+
Dict(String, Int)
9+
10+
pub type EncodeFn =
11+
fn(String) -> Result(String, String)
12+
13+
pub type DecodeFn =
14+
fn(String) -> Result(String, String)
15+
16+
pub type CodeBook {
17+
CodeBook(encode: EncodeFn, decode: DecodeFn, options: List(Options))
18+
}
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,21 @@ import gleam/int.{bitwise_shift_left}
55
import gleam/list
66
import gleam/result
77
import gleam/string
8-
import gbase32/codebook.{type CodeBook}
8+
import gbase32_clockwork/codebook.{type DecodeBook, type EncodeBook}
99

10-
fn to_symbol(c: Int, codebook: CodeBook) -> Result(String, String) {
11-
dict.get(codebook.encoder, c)
10+
fn to_symbol(c: Int, codebook: EncodeBook) -> Result(String, String) {
11+
dict.get(codebook, c)
1212
|> result.map_error(fn(_) { "Encoding outside range" })
1313
}
1414

15-
fn from_symbol(sym: String, codebook: CodeBook) -> Result(Int, String) {
15+
fn from_symbol(sym: String, codebook: DecodeBook) -> Result(Int, String) {
1616
sym
17-
|> dict.get(codebook.decoder, _)
17+
|> dict.get(codebook, _)
1818
|> result.map_error(fn(_) { "Encoding outside range" })
1919
}
2020

2121
fn encode_rec(
22-
codebook: CodeBook,
22+
codebook: EncodeBook,
2323
input: BitArray,
2424
acc: Result(BytesBuilder, String),
2525
) -> Result(BytesBuilder, String) {
@@ -71,7 +71,7 @@ fn encode_rec(
7171
}
7272

7373
fn decode_rec(
74-
codebook: CodeBook,
74+
codebook: DecodeBook,
7575
input: List(String),
7676
counter: Int,
7777
acc: Result(BytesBuilder, String),
@@ -105,7 +105,7 @@ fn decode_rec(
105105
}
106106
}
107107

108-
pub fn encode(codebook: CodeBook, input: String) -> Result(String, String) {
108+
pub fn encode(codebook: EncodeBook, input: String) -> Result(String, String) {
109109
let encoded =
110110
input
111111
|> bit_array.from_string()
@@ -122,7 +122,7 @@ pub fn encode(codebook: CodeBook, input: String) -> Result(String, String) {
122122
}
123123
}
124124

125-
pub fn decode(codebook: CodeBook, input: String) -> Result(String, String) {
125+
pub fn decode(codebook: DecodeBook, input: String) -> Result(String, String) {
126126
let decoded =
127127
input
128128
|> string.trim()
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
pub type Options {
2+
WithPadding
3+
Lowercase
4+
}

test/gbase32_clockwork_test.gleam

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
import gleeunit
2+
import gleeunit/should
3+
import gbase32_clockwork/options.{Lowercase}
4+
import gbase32_clockwork
5+
6+
pub fn main() {
7+
gleeunit.main()
8+
}
9+
10+
pub fn encode_uppercase_test() {
11+
let codebook = gbase32_clockwork.new([])
12+
13+
codebook.encode("")
14+
|> should.equal(Ok(""))
15+
16+
codebook.encode("f")
17+
|> should.equal(Ok("CR"))
18+
19+
codebook.encode("fo")
20+
|> should.equal(Ok("CSQG"))
21+
22+
codebook.encode("foo")
23+
|> should.equal(Ok("CSQPY"))
24+
25+
codebook.encode("foob")
26+
|> should.equal(Ok("CSQPYRG"))
27+
28+
codebook.encode("fooba")
29+
|> should.equal(Ok("CSQPYRK1"))
30+
31+
codebook.encode("foobar")
32+
|> should.equal(Ok("CSQPYRK1E8"))
33+
34+
codebook.encode("Wow, it works!")
35+
|> should.equal(Ok("AXQQEB10D5T20XVFE9NQ688"))
36+
}
37+
38+
pub fn encode_lowercase_test() {
39+
let codebook = gbase32_clockwork.new([Lowercase])
40+
41+
codebook.encode("")
42+
|> should.equal(Ok(""))
43+
44+
codebook.encode("f")
45+
|> should.equal(Ok("cr"))
46+
47+
codebook.encode("fo")
48+
|> should.equal(Ok("csqg"))
49+
50+
codebook.encode("foo")
51+
|> should.equal(Ok("csqpy"))
52+
53+
codebook.encode("foob")
54+
|> should.equal(Ok("csqpyrg"))
55+
56+
codebook.encode("fooba")
57+
|> should.equal(Ok("csqpyrk1"))
58+
59+
codebook.encode("foobar")
60+
|> should.equal(Ok("csqpyrk1e8"))
61+
62+
codebook.encode("Wow, it works!")
63+
|> should.equal(Ok("axqqeb10d5t20xvfe9nq688"))
64+
}
65+
66+
pub fn decode_test() {
67+
let codebook = gbase32_clockwork.new([])
68+
69+
codebook.decode("")
70+
|> should.equal(Ok(""))
71+
72+
codebook.decode("CR")
73+
|> should.equal(Ok("f"))
74+
75+
codebook.decode("CSQG")
76+
|> should.equal(Ok("fo"))
77+
78+
codebook.decode("CSQPY")
79+
|> should.equal(Ok("foo"))
80+
81+
codebook.decode("CSQPYRG")
82+
|> should.equal(Ok("foob"))
83+
84+
codebook.decode("CSQPYRK1")
85+
|> should.equal(Ok("fooba"))
86+
87+
codebook.decode("CSQPYRK1E8")
88+
|> should.equal(Ok("foobar"))
89+
90+
codebook.decode(" CSQPYRK1E8 ")
91+
|> should.equal(Ok("foobar"))
92+
93+
codebook.decode("CSQPYRK1E8====")
94+
|> should.equal(Ok("foobar"))
95+
96+
codebook.decode(" CSQPYRK1E8==== ")
97+
|> should.equal(Ok("foobar"))
98+
99+
codebook.decode("AXQQEB10D5T20XVFE9NQ688")
100+
|> should.equal(Ok("Wow, it works!"))
101+
102+
codebook.decode("cSqPy")
103+
|> should.equal(Ok("foo"))
104+
105+
codebook.decode("CSQPYRKi")
106+
|> should.equal(Ok("fooba"))
107+
108+
codebook.decode("csqpyrk1e8")
109+
|> should.equal(Ok("foobar"))
110+
111+
codebook.decode("C-SQPY")
112+
|> should.equal(Error("Encoding outside range"))
113+
}

0 commit comments

Comments
 (0)