From 3b64e784a1c3b09aca144443f467a660c54fdbef Mon Sep 17 00:00:00 2001 From: Eric Rakestraw Date: Sun, 24 May 2026 15:04:33 +0000 Subject: [PATCH] Deduplicate schema segment semantics validation --- schema/output.go | 55 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 18 deletions(-) diff --git a/schema/output.go b/schema/output.go index 2715d50..58ee448 100644 --- a/schema/output.go +++ b/schema/output.go @@ -251,15 +251,17 @@ func outputSchema(schemaPath string) (*jsonschema.Schema, error) { } func validateSemantics(transcript Transcript) error { + segments := make([]segmentSemantics, len(transcript.Segments)) for index, segment := range transcript.Segments { - wantID := index + 1 - if segment.ID != wantID { - return fmt.Errorf("segment %d has id %d; want %d", index, segment.ID, wantID) - } - if segment.End < segment.Start { - return fmt.Errorf("segment %d has end %.3f before start %.3f", index, segment.End, segment.Start) + segments[index] = segmentSemantics{ + id: segment.ID, + start: segment.Start, + end: segment.End, } } + if err := validateSegmentSemantics(segments); err != nil { + return err + } for index, group := range transcript.OverlapGroups { if group.End < group.Start { return fmt.Errorf("overlap_group %d has end %.3f before start %.3f", index, group.End, group.Start) @@ -269,26 +271,43 @@ func validateSemantics(transcript Transcript) error { } func validateIntermediateSemantics(transcript IntermediateTranscript) error { + segments := make([]segmentSemantics, len(transcript.Segments)) for index, segment := range transcript.Segments { - wantID := index + 1 - if segment.ID != wantID { - return fmt.Errorf("segment %d has id %d; want %d", index, segment.ID, wantID) - } - if segment.End < segment.Start { - return fmt.Errorf("segment %d has end %.3f before start %.3f", index, segment.End, segment.Start) + segments[index] = segmentSemantics{ + id: segment.ID, + start: segment.Start, + end: segment.End, } } - return nil + return validateSegmentSemantics(segments) } func validateMinimalSemantics(transcript MinimalTranscript) error { + segments := make([]segmentSemantics, len(transcript.Segments)) for index, segment := range transcript.Segments { - wantID := index + 1 - if segment.ID != wantID { - return fmt.Errorf("segment %d has id %d; want %d", index, segment.ID, wantID) + segments[index] = segmentSemantics{ + id: segment.ID, + start: segment.Start, + end: segment.End, } - if segment.End < segment.Start { - return fmt.Errorf("segment %d has end %.3f before start %.3f", index, segment.End, segment.Start) + } + return validateSegmentSemantics(segments) +} + +type segmentSemantics struct { + id int + start float64 + end float64 +} + +func validateSegmentSemantics(segments []segmentSemantics) error { + for index, segment := range segments { + wantID := index + 1 + if segment.id != wantID { + return fmt.Errorf("segment %d has id %d; want %d", index, segment.id, wantID) + } + if segment.end < segment.start { + return fmt.Errorf("segment %d has end %.3f before start %.3f", index, segment.end, segment.start) } } return nil