presets.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package options
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. // parsePresets parses presets from the config and fills the presets map
  7. func (f *Factory) parsePresets() error {
  8. for _, presetStr := range f.config.Presets {
  9. if err := f.parsePreset(presetStr); err != nil {
  10. return err
  11. }
  12. }
  13. return nil
  14. }
  15. // parsePreset parses a preset string and returns the name and options
  16. func (f *Factory) parsePreset(presetStr string) error {
  17. presetStr = strings.Trim(presetStr, " ")
  18. if len(presetStr) == 0 || strings.HasPrefix(presetStr, "#") {
  19. return nil
  20. }
  21. parts := strings.Split(presetStr, "=")
  22. if len(parts) != 2 {
  23. return fmt.Errorf("invalid preset string: %s", presetStr)
  24. }
  25. name := strings.Trim(parts[0], " ")
  26. if len(name) == 0 {
  27. return fmt.Errorf("empty preset name: %s", presetStr)
  28. }
  29. value := strings.Trim(parts[1], " ")
  30. if len(value) == 0 {
  31. return fmt.Errorf("empty preset value: %s", presetStr)
  32. }
  33. optsStr := strings.Split(value, "/")
  34. opts, rest := f.parseURLOptions(optsStr)
  35. if len(rest) > 0 {
  36. return fmt.Errorf("invalid preset value: %s", presetStr)
  37. }
  38. if f.presets == nil {
  39. f.presets = make(Presets)
  40. }
  41. f.presets[name] = opts
  42. return nil
  43. }
  44. // validatePresets validates all presets by applying them to a new ProcessingOptions instance
  45. func (f *Factory) validatePresets() error {
  46. for name, opts := range f.presets {
  47. po := f.NewProcessingOptions()
  48. if err := f.applyURLOptions(po, opts, true, name); err != nil {
  49. return fmt.Errorf("Error in preset `%s`: %s", name, err)
  50. }
  51. }
  52. return nil
  53. }