Esempio n. 1
0
func ExampleUnmarshal() {
	msg, s, err := capnp.NewMessage(capnp.SingleSegment(nil))
	if err != nil {
		fmt.Printf("allocation error %v\n", err)
		return
	}
	d, err := air.NewRootZdate(s)
	if err != nil {
		fmt.Printf("root error %v\n", err)
		return
	}
	d.SetYear(2004)
	d.SetMonth(12)
	d.SetDay(7)
	data, err := msg.Marshal()
	if err != nil {
		fmt.Printf("marshal error %v\n", err)
		return
	}

	// Read
	msg, err = capnp.Unmarshal(data)
	if err != nil {
		fmt.Printf("unmarshal error %v\n", err)
		return
	}
	d, err = air.ReadRootZdate(msg)
	if err != nil {
		fmt.Printf("read root error %v\n", err)
		return
	}
	fmt.Printf("year %d, month %d, day %d\n", d.Year(), d.Month(), d.Day())
	// Output:
	// year 2004, month 12, day 7
}
// actually return n segments back-to-back.
// WriteTo will automatically add the stream header word with message length.
//
func zdateReaderNBackToBack(n int, packed bool) *bytes.Reader {

	buf := bytes.Buffer{}

	for i := 0; i < n; i++ {
		msg, seg, err := capnp.NewMessage(capnp.SingleSegment(nil))
		if err != nil {
			panic(err)
		}
		d, err := air.NewRootZdate(seg)
		if err != nil {
			panic(err)
		}
		d.SetMonth(12)
		d.SetDay(7)
		d.SetYear(int16(2004 + i))

		if packed {
			b, err := msg.MarshalPacked()
			if err != nil {
				panic(err)
			}
			buf.Write(b)
		} else {
			b, err := msg.Marshal()
			if err != nil {
				panic(err)
			}
			buf.Write(b)
		}
	}

	return bytes.NewReader(buf.Bytes())
}