encodedText.go 840 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package weirdtext
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. type EncodedText struct {
  7. Text string
  8. EncodedWords []string
  9. }
  10. const (
  11. prefix = "\n---weird---\n"
  12. )
  13. func (e EncodedText) String() string {
  14. return fmt.Sprintf("%s%s%s%v", prefix, e.Text, prefix, strings.Join(e.EncodedWords, " "))
  15. }
  16. func (e *EncodedText) FromString(serialized string) error {
  17. if !strings.HasPrefix(serialized, prefix) {
  18. return fmt.Errorf("Invalid prefix: %s", serialized)
  19. }
  20. parts := strings.Split(serialized, prefix)
  21. if len(parts) != 3 {
  22. return fmt.Errorf("Invalid string: %s", serialized)
  23. }
  24. if parts[1] == "" {
  25. return fmt.Errorf("There's no encoded text: %s", serialized)
  26. }
  27. e.Text = parts[1]
  28. if parts[2] == "" {
  29. return fmt.Errorf("There are no encoded words: %s", serialized)
  30. }
  31. e.EncodedWords = strings.Split(parts[2], " ")
  32. return nil
  33. }