enchantrix

package
v0.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 14, 2025 License: EUPL-1.2 Imports: 17 Imported by: 0

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Transmute

func Transmute(data []byte, sigils []Sigil) ([]byte, error)

Transmute is a helper function for applying a series of sigils to data.

Example
package main

import (
	"fmt"
	"log"

	"github.com/Snider/Enchantrix/pkg/enchantrix"
)

func main() {
	data := []byte("Hello, World!")
	sigils := []enchantrix.Sigil{
		&enchantrix.ReverseSigil{},
		&enchantrix.HexSigil{},
	}
	transformed, err := enchantrix.Transmute(data, sigils)
	if err != nil {
		log.Fatalf("Transmute failed: %v", err)
	}
	fmt.Printf("Transformed data: %s\n", transformed)
}
Output:

Transformed data: 21646c726f57202c6f6c6c6548

Types

type Base64Sigil

type Base64Sigil struct{}

Base64Sigil is a Sigil that encodes/decodes data to/from base64. The In method encodes the data, and the Out method decodes it.

func (*Base64Sigil) In

func (s *Base64Sigil) In(data []byte) ([]byte, error)

In encodes the data to base64.

func (*Base64Sigil) Out

func (s *Base64Sigil) Out(data []byte) ([]byte, error)

Out decodes the data from base64.

type Enchantrix

type Enchantrix interface {
	Transmute(data []byte, sigils []Sigil) ([]byte, error)
}

Enchantrix defines the interface for acceptance testing.

type GzipSigil

type GzipSigil struct {
	// contains filtered or unexported fields
}

GzipSigil is a Sigil that compresses/decompresses data using gzip. The In method compresses the data, and the Out method decompresses it.

func (*GzipSigil) In

func (s *GzipSigil) In(data []byte) ([]byte, error)

In compresses the data using gzip.

func (*GzipSigil) Out

func (s *GzipSigil) Out(data []byte) ([]byte, error)

Out decompresses the data using gzip.

type HashSigil

type HashSigil struct {
	Hash crypto.Hash
}

HashSigil is a Sigil that hashes the data using a specified algorithm. The In method hashes the data, and the Out method is a no-op.

func NewHashSigil

func NewHashSigil(h crypto.Hash) *HashSigil

NewHashSigil creates a new HashSigil.

func (*HashSigil) In

func (s *HashSigil) In(data []byte) ([]byte, error)

In hashes the data.

func (*HashSigil) Out

func (s *HashSigil) Out(data []byte) ([]byte, error)

Out is a no-op for HashSigil.

type HexSigil

type HexSigil struct{}

HexSigil is a Sigil that encodes/decodes data to/from hexadecimal. The In method encodes the data, and the Out method decodes it.

func (*HexSigil) In

func (s *HexSigil) In(data []byte) ([]byte, error)

In encodes the data to hexadecimal.

func (*HexSigil) Out

func (s *HexSigil) Out(data []byte) ([]byte, error)

Out decodes the data from hexadecimal.

type JSONSigil

type JSONSigil struct{ Indent bool }

JSONSigil is a Sigil that compacts or indents JSON data. The Out method is a no-op.

func (*JSONSigil) In

func (s *JSONSigil) In(data []byte) ([]byte, error)

In compacts or indents the JSON data.

func (*JSONSigil) Out

func (s *JSONSigil) Out(data []byte) ([]byte, error)

Out is a no-op for JSONSigil.

type ReverseSigil

type ReverseSigil struct{}

ReverseSigil is a Sigil that reverses the bytes of the payload. It is a symmetrical Sigil, meaning that the In and Out methods perform the same operation.

func (*ReverseSigil) In

func (s *ReverseSigil) In(data []byte) ([]byte, error)

In reverses the bytes of the data.

func (*ReverseSigil) Out

func (s *ReverseSigil) Out(data []byte) ([]byte, error)

Out reverses the bytes of the data.

type Sigil

type Sigil interface {
	// In transforms the data.
	In(data []byte) ([]byte, error)
	// Out reverses the transformation.
	Out(data []byte) ([]byte, error)
}

Sigil defines the interface for a data transformer. A Sigil is a reversible or irreversible transformation of a byte slice.

func NewSigil

func NewSigil(name string) (Sigil, error)

NewSigil is a factory function that returns a Sigil based on a string name. It is the primary way to create Sigil instances.

Example
package main

import (
	"fmt"
	"log"

	"github.com/Snider/Enchantrix/pkg/enchantrix"
)

func main() {
	sigil, err := enchantrix.NewSigil("base64")
	if err != nil {
		log.Fatalf("Failed to create sigil: %v", err)
	}
	data := []byte("Hello, World!")
	encoded, err := sigil.In(data)
	if err != nil {
		log.Fatalf("Sigil In failed: %v", err)
	}
	fmt.Printf("Encoded data: %s\n", encoded)
	decoded, err := sigil.Out(encoded)
	if err != nil {
		log.Fatalf("Sigil Out failed: %v", err)
	}
	fmt.Printf("Decoded data: %s\n", decoded)
}
Output:

Encoded data: SGVsbG8sIFdvcmxkIQ==
Decoded data: Hello, World!

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL