aboutsummaryrefslogtreecommitdiff
path: root/readme.md
blob: b8a4ccb64f90e04ccb12c8b61a7f66f4dd35f9a1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# lullaby

> a large multi-purpose library for lua (primarily 5.4) revolving around threading and cryptography, and including network, math, io, and table functions

heres an example of a webserver to return a [sha0](https://en.wikipedia.org/wiki/SHA-0) hash of an input

<blockquote>

```lua
--(this is in tests/net2.lua)
net = require "lullaby.net"
crypto = require "lullaby.crypto"
local port = 8080
MAX_LENGTH = 2048

net.listen(function(server)

  --listen to post requests at localhost:8080 (root directory)
  server:POST("/", function(res, req)
    --creates a sha0 hash object
    local hash = crypto.sha0()
    --loads an extra 2048 characters from the request body (the body is not guaranteed to be >= 2048 characters, reasoning in docs)
    req:roll(MAX_LENGTH)

    --incremental hashes allow updating via addition, in this case adding the body and getting a string from it
    hash = (hash + req.Body):final()
    --send the hash to the client, closes connection, but thread is live until it ends
    res:send(hash)
  end)

end, port)
```

</blockquote>

---

## building

build with `make`, output is `./lullaby.so` or (win)`./lullaby.dll`

windows works through msys2, install `mingw-w64-x86_64-lua` then run `make CC=gcc`

you can install with `doas make install` which will install lullaby.so into /usr/local/lib/lua/5.X

install directory can be configured with `INSTALL=...` which defaults to /usr/local/lib/lua/, but may be wanted in /usr/lib64/lua/

lua version can be specified with `version=...`, similar to 5.1, 5.3, jit, the default it 5.4

for working on the code base, i recommend using bear to generate compile_commands.json [(as outlined here)](https://clangd.llvm.org/installation#compile_commandsjson) which should probably let your ide find the headers

---

[some docs](docs/)

## todo:

* better tests

* rewrite docs

    * net mostly complete
    
* portability (memmem)

----

# credits

* [luaproc](https://github.com/askyrme/luaproc) helped wrap my head around multiple lua_State concepts