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