serialize.go 885 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package unit
  2. import (
  3. "bytes"
  4. "io"
  5. )
  6. // Serialize encodes all of the given UnitOption objects into a unit file
  7. func Serialize(opts []*UnitOption) io.Reader {
  8. var buf bytes.Buffer
  9. if len(opts) == 0 {
  10. return &buf
  11. }
  12. curSection := opts[0].Section
  13. writeSectionHeader(&buf, curSection)
  14. writeNewline(&buf)
  15. for _, opt := range opts {
  16. if opt.Section != curSection {
  17. curSection = opt.Section
  18. writeNewline(&buf)
  19. writeSectionHeader(&buf, curSection)
  20. writeNewline(&buf)
  21. }
  22. writeOption(&buf, opt)
  23. writeNewline(&buf)
  24. }
  25. return &buf
  26. }
  27. func writeNewline(buf *bytes.Buffer) {
  28. buf.WriteRune('\n')
  29. }
  30. func writeSectionHeader(buf *bytes.Buffer, section string) {
  31. buf.WriteRune('[')
  32. buf.WriteString(section)
  33. buf.WriteRune(']')
  34. }
  35. func writeOption(buf *bytes.Buffer, opt *UnitOption) {
  36. buf.WriteString(opt.Name)
  37. buf.WriteRune('=')
  38. buf.WriteString(opt.Value)
  39. }