letter.go raw
1 package types
2
3 import (
4 "io"
5
6 "next.orly.dev/pkg/lol/chk"
7 )
8
9 const LetterLen = 1
10
11 // Edge direction constants for pubkey graph relationships
12 const (
13 EdgeDirectionAuthor byte = 0 // The pubkey is the event author
14 EdgeDirectionPTagOut byte = 1 // Outbound: Event author references this pubkey in p-tag
15 EdgeDirectionPTagIn byte = 2 // Inbound: This pubkey is referenced in event's p-tag
16 )
17
18 // Edge direction constants for event-to-event (e-tag) graph relationships
19 const (
20 EdgeDirectionETagOut byte = 0 // Outbound: This event references target event via e-tag
21 EdgeDirectionETagIn byte = 1 // Inbound: This event is referenced by source event via e-tag
22 )
23
24 // Edge direction constants for pubkey-to-pubkey (noun-noun) graph relationships
25 // These are materialized from events containing p-tags, collapsing the two-hop
26 // pubkey→event→pubkey traversal into a direct single-hop edge.
27 const (
28 EdgeDirectionPubkeyOut byte = 0 // Outbound: source pubkey references target pubkey (via p-tag authorship)
29 EdgeDirectionPubkeyIn byte = 1 // Inbound: target pubkey is referenced by source pubkey
30 )
31
32 type Letter struct {
33 val byte
34 }
35
36 func (p *Letter) Set(lb byte) { p.val = lb }
37
38 func (p *Letter) Letter() byte { return p.val }
39
40 func (p *Letter) MarshalWrite(w io.Writer) (err error) {
41 _, err = w.Write([]byte{p.val})
42 return
43 }
44
45 func (p *Letter) UnmarshalRead(r io.Reader) (err error) {
46 var val [1]byte // Fixed array avoids heap escape
47 if _, err = r.Read(val[:]); chk.E(err) {
48 return
49 }
50 p.val = val[0]
51 return
52 }
53