result.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package executor
  2. import (
  3. "fmt"
  4. schemepkg "git.buran.team/main/cep/scheme"
  5. )
  6. type Result struct {
  7. Code int
  8. StdoutProcessors []Processor
  9. StderrProcessors []Processor
  10. }
  11. func NewResult(resultScheme schemepkg.Result) (*Result, error) {
  12. stdoutProcessors := []Processor{}
  13. if resultScheme.Stdout != nil {
  14. for _, processorScheme := range resultScheme.Stdout {
  15. processor, err := NewProcessor(processorScheme)
  16. if err != nil {
  17. return nil, fmt.Errorf("can't create result: %w", err)
  18. }
  19. stdoutProcessors = append(stdoutProcessors, processor)
  20. }
  21. }
  22. stderrProcessors := []Processor{}
  23. if resultScheme.Stderr != nil {
  24. for _, processorScheme := range resultScheme.Stderr {
  25. processor, err := NewProcessor(processorScheme)
  26. if err != nil {
  27. return nil, fmt.Errorf("can't create result: %w", err)
  28. }
  29. stderrProcessors = append(stderrProcessors, processor)
  30. }
  31. }
  32. return &Result{
  33. Code: resultScheme.Code,
  34. StdoutProcessors: stdoutProcessors,
  35. StderrProcessors: stderrProcessors,
  36. }, nil
  37. }
  38. func (this *Result) Check(code int, stdout []byte, stderr []byte) bool {
  39. if code != this.Code {
  40. return false
  41. }
  42. for _, processor := range this.StdoutProcessors {
  43. if !processor.Process(stdout) {
  44. return false
  45. }
  46. }
  47. for _, processor := range this.StderrProcessors {
  48. if !processor.Process(stderr) {
  49. return false
  50. }
  51. }
  52. return true
  53. }