Enchantrix/docs/standalone_sigils.md
2025-11-25 00:00:24 +00:00

2 KiB

Standalone Sigils

This example demonstrates how to use sigils independently to transform data.

Available Sigils

The enchantrix package provides a wide variety of sigils for data transformation and hashing.

Category Sigils
Encoding hex, base64, reverse
Compression gzip
Formatting json, json-indent
Standard Hashes md4, md5, sha1, sha224, sha256, sha384, sha512
Extended Hashes ripemd160, sha3-224, sha3-256, sha3-384, sha3-512, sha512-224, sha512-256
Blake Hashes blake2s-256, blake2b-256, blake2b-384, blake2b-512

Usage Example

package main

import (
	"fmt"
	"log"

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

func demoSigils() {
	fmt.Println("--- Standalone Sigil Demo ---")
	data := []byte(`{"message": "hello world"}`)
	fmt.Printf("Original data: %s\n", data)

	// A chain of sigils to apply
	sigils := []string{"gzip", "base64"}
	fmt.Printf("Applying sigil chain: %v\n", sigils)

	var transformedData = data
	for _, name := range sigils {
		s, err := enchantrix.NewSigil(name)
		if err != nil {
			log.Fatalf("Failed to create sigil %s: %v", name, err)
		}
		transformedData, err = s.In(transformedData)
		if err != nil {
			log.Fatalf("Failed to apply sigil %s 'In': %v", name, err)
		}
		fmt.Printf(" -> After '%s': %s\n", name, transformedData)
	}

	fmt.Println("\nReversing sigil chain...")
	// Reverse the transformations
	for i := len(sigils) - 1; i >= 0; i-- {
		name := sigils[i]
		s, err := enchantrix.NewSigil(name)
		if err != nil {
			log.Fatalf("Failed to create sigil %s: %v", name, err)
		}
		transformedData, err = s.Out(transformedData)
		if err != nil {
			log.Fatalf("Failed to apply sigil %s 'Out': %v", name, err)
		}
		fmt.Printf(" -> After '%s' Out: %s\n", name, transformedData)
	}

	if string(data) == string(transformedData) {
		fmt.Println("Success! Data returned to original state.")
	} else {
		fmt.Println("Failure! Data did not return to original state.")
	}
	fmt.Println()
}