Skip to content

Standalone Sigils

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

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()
}