File tree Expand file tree Collapse file tree 2 files changed +17
-20
lines changed
Expand file tree Collapse file tree 2 files changed +17
-20
lines changed Original file line number Diff line number Diff line change @@ -36,39 +36,35 @@ func (p *PolicySlice) UnmarshalCedar(b []byte) error {
3636}
3737
3838type Decoder struct {
39- r io.Reader
40-
41- once sync.Once
42-
43- parser * parser
39+ createParser func () (* parser , error )
4440}
4541
4642func NewDecoder (r io.Reader ) * Decoder {
47- return & Decoder {r : r }
48- }
43+ return & Decoder {
44+ createParser : sync .OnceValues (func () (* parser , error ) {
45+ tokens , err := TokenizeReader (r )
46+ if err != nil {
47+ return nil , err
48+ }
4949
50- func (d * Decoder ) Decode (p * Policy ) error {
51- var err error
50+ p := newParser (tokens )
5251
53- d .once .Do (func () {
54- tokens , e := TokenizeReader (d .r )
55- if e != nil {
56- err = e
57- return
58- }
52+ return & p , nil
53+ }),
54+ }
55+ }
5956
60- parser := newParser (tokens )
61- d .parser = & parser
62- })
57+ func (d * Decoder ) Decode (p * Policy ) error {
58+ parser , err := d .createParser ()
6359 if err != nil {
6460 return err
6561 }
6662
67- if d . parser .peek ().isEOF () {
63+ if parser .peek ().isEOF () {
6864 return io .EOF
6965 }
7066
71- return p .fromCedar (d . parser )
67+ return p .fromCedar (parser )
7268}
7369
7470func (p * Policy ) UnmarshalCedar (b []byte ) error {
Original file line number Diff line number Diff line change @@ -579,6 +579,7 @@ func TestDecoderErrors(t *testing.T) {
579579 decoder := parser .NewDecoder (strings .NewReader (tt ))
580580
581581 testutil .Error (t , decoder .Decode (nil ))
582+ testutil .Error (t , decoder .Decode (nil ))
582583 })
583584 }
584585}
You can’t perform that action at this time.
0 commit comments