MCPcopy Create free account
hub / github.com/WICG/webpackage / Finalize

Method Finalize

go/bundle/encoder.go:112–208  ·  view source on GitHub ↗
(ver version.Version)

Source from the content-addressed store, hash-verified

110}
111
112func (is *indexSection) Finalize(ver version.Version) error {
113 if is.bytes != nil {
114 panic("indexSection must be Finalize()-d only once.")
115 }
116
117 var b bytes.Buffer
118 enc := cbor.NewEncoder(&b)
119
120 if ver.SupportsVariants() {
121 // CDDL:
122 // index = {* whatwg-url => [ variants-value, +location-in-responses ] }
123 // variants-value = bstr
124 // location-in-responses = (offset: uint, length: uint)
125 m := make(map[string][]*indexEntry)
126 for _, e := range is.es {
127 url := e.URL.String()
128 m[url] = append(m[url], e)
129 }
130
131 mes := []*cbor.MapEntryEncoder{}
132 for url, es := range m {
133 var variantsValue []byte
134 if len(es) > 1 {
135 variantsValue = []byte(es[0].Variants)
136 var err error
137 es, err = entriesInPossibleKeyOrder(es)
138 if err != nil {
139 return fmt.Errorf("bundle: cannot construct index entry for %s: %v", url, err)
140 }
141 }
142
143 me := cbor.GenerateMapEntry(func(keyE *cbor.Encoder, valueE *cbor.Encoder) {
144 if err := keyE.EncodeTextString(url); err != nil {
145 panic(err)
146 }
147
148 if err := valueE.EncodeArrayHeader(1 + len(es)*2); err != nil {
149 panic(err)
150 }
151 if err := valueE.EncodeByteString(variantsValue); err != nil {
152 panic(err)
153 }
154 for _, e := range es {
155 if err := valueE.EncodeUint(e.Offset); err != nil {
156 panic(err)
157 }
158 if err := valueE.EncodeUint(e.Length); err != nil {
159 panic(err)
160 }
161 }
162 })
163 mes = append(mes, me)
164 }
165 if err := enc.EncodeMap(mes); err != nil {
166 return err
167 }
168 } else {
169 // CDDL:

Callers 3

WriteToMethod · 0.95

Calls 10

EncodeMapMethod · 0.95
NewEncoderFunction · 0.92
GenerateMapEntryFunction · 0.92
SupportsVariantsMethod · 0.80
EncodeTextStringMethod · 0.80
EncodeArrayHeaderMethod · 0.80
EncodeByteStringMethod · 0.80
EncodeUintMethod · 0.80
StringMethod · 0.45