2025-10-31 15:19:30 +00:00
|
|
|
package enchantrix
|
|
|
|
|
|
|
|
|
|
// Sigil defines the interface for a data transformer.
|
2025-11-14 14:39:45 +00:00
|
|
|
// A Sigil is a reversible or irreversible transformation of a byte slice.
|
2025-10-31 15:19:30 +00:00
|
|
|
type Sigil interface {
|
2025-11-14 14:39:45 +00:00
|
|
|
// In transforms the data.
|
2025-10-31 15:19:30 +00:00
|
|
|
In(data []byte) ([]byte, error)
|
2025-11-14 14:39:45 +00:00
|
|
|
// Out reverses the transformation.
|
2025-10-31 15:19:30 +00:00
|
|
|
Out(data []byte) ([]byte, error)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Enchantrix defines the interface for acceptance testing.
|
|
|
|
|
type Enchantrix interface {
|
|
|
|
|
Transmute(data []byte, sigils []Sigil) ([]byte, error)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Transmute is a helper function for applying a series of sigils to data.
|
|
|
|
|
func Transmute(data []byte, sigils []Sigil) ([]byte, error) {
|
|
|
|
|
var err error
|
|
|
|
|
for _, sigil := range sigils {
|
|
|
|
|
data, err = sigil.In(data)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return data, nil
|
|
|
|
|
}
|