rlp: remove Flat
This commit is contained in:
		
							parent
							
								
									3d0c6a8345
								
							
						
					
					
						commit
						a0566c1058
					
				| @ -29,48 +29,6 @@ type Encoder interface { | |||||||
| 	EncodeRLP(io.Writer) error | 	EncodeRLP(io.Writer) error | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Flat wraps a value (which must encode as a list) so
 |  | ||||||
| // it encodes as the list's elements.
 |  | ||||||
| //
 |  | ||||||
| // Example: suppose you have defined a type
 |  | ||||||
| //
 |  | ||||||
| //     type foo struct { A, B uint }
 |  | ||||||
| //
 |  | ||||||
| // Under normal encoding rules,
 |  | ||||||
| //
 |  | ||||||
| //     rlp.Encode(foo{1, 2}) --> 0xC20102
 |  | ||||||
| //
 |  | ||||||
| // This function can help you achieve the following encoding:
 |  | ||||||
| //
 |  | ||||||
| //     rlp.Encode(rlp.Flat(foo{1, 2})) --> 0x0102
 |  | ||||||
| func Flat(val interface{}) Encoder { |  | ||||||
| 	return flatenc{val} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| type flatenc struct{ val interface{} } |  | ||||||
| 
 |  | ||||||
| func (e flatenc) EncodeRLP(out io.Writer) error { |  | ||||||
| 	// record current output position
 |  | ||||||
| 	var ( |  | ||||||
| 		eb          = out.(*encbuf) |  | ||||||
| 		prevstrsize = len(eb.str) |  | ||||||
| 		prevnheads  = len(eb.lheads) |  | ||||||
| 	) |  | ||||||
| 	if err := eb.encode(e.val); err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	// check that a new list header has appeared
 |  | ||||||
| 	if len(eb.lheads) == prevnheads || eb.lheads[prevnheads].offset == prevstrsize-1 { |  | ||||||
| 		return fmt.Errorf("rlp.Flat: %T did not encode as list", e.val) |  | ||||||
| 	} |  | ||||||
| 	// remove the new list header
 |  | ||||||
| 	newhead := eb.lheads[prevnheads] |  | ||||||
| 	copy(eb.lheads[prevnheads:], eb.lheads[prevnheads+1:]) |  | ||||||
| 	eb.lheads = eb.lheads[:len(eb.lheads)-1] |  | ||||||
| 	eb.lhsize -= headsize(uint64(newhead.size)) |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Encode writes the RLP encoding of val to w. Note that Encode may
 | // Encode writes the RLP encoding of val to w. Note that Encode may
 | ||||||
| // perform many small writes in some cases. Consider making w
 | // perform many small writes in some cases. Consider making w
 | ||||||
| // buffered.
 | // buffered.
 | ||||||
|  | |||||||
| @ -189,15 +189,6 @@ var encTests = []encTest{ | |||||||
| 	{val: &recstruct{5, nil}, output: "C205C0"}, | 	{val: &recstruct{5, nil}, output: "C205C0"}, | ||||||
| 	{val: &recstruct{5, &recstruct{4, &recstruct{3, nil}}}, output: "C605C404C203C0"}, | 	{val: &recstruct{5, &recstruct{4, &recstruct{3, nil}}}, output: "C605C404C203C0"}, | ||||||
| 
 | 
 | ||||||
| 	// flat
 |  | ||||||
| 	{val: Flat(uint(1)), error: "rlp.Flat: uint did not encode as list"}, |  | ||||||
| 	{val: Flat(simplestruct{A: 3, B: "foo"}), output: "0383666F6F"}, |  | ||||||
| 	{ |  | ||||||
| 		// value generates more list headers after the Flat
 |  | ||||||
| 		val:    []interface{}{"foo", []uint{1, 2}, Flat([]uint{3, 4}), []uint{5, 6}, "bar"}, |  | ||||||
| 		output: "D083666F6FC201020304C2050683626172", |  | ||||||
| 	}, |  | ||||||
| 
 |  | ||||||
| 	// nil
 | 	// nil
 | ||||||
| 	{val: (*uint)(nil), output: "80"}, | 	{val: (*uint)(nil), output: "80"}, | ||||||
| 	{val: (*string)(nil), output: "80"}, | 	{val: (*string)(nil), output: "80"}, | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user