// ************************************************************
// This file is automatically generated by genxdr. Do not edit.
// ************************************************************

package xdrcalmh

import (
	"github.com/calmh/xdr"
)

/*

XDRA Structure:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                                                               /
\                  Name (length + padded data)                  \
/                                                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                      Birth Day (64 bits)                      +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                                                               /
\                 Phone (length + padded data)                  \
/                                                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Siblings                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Spouse (V=0 or 1)                      |V|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                        Money (64 bits)                        +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


struct XDRA {
	string Name<>;
	hyper BirthDay;
	string Phone<>;
	int Siblings;
	bool Spouse;
	unsigned hyper Money;
}

*/

func (o XDRA) XDRSize() int {
	return 4 + len(o.Name) + xdr.Padding(len(o.Name)) + 8 +
		4 + len(o.Phone) + xdr.Padding(len(o.Phone)) + 4 + 4 + 8
}

func (o XDRA) MarshalXDR() ([]byte, error) {
	buf := make([]byte, o.XDRSize())
	m := &xdr.Marshaller{Data: buf}
	return buf, o.MarshalXDRInto(m)
}

func (o XDRA) MustMarshalXDR() []byte {
	bs, err := o.MarshalXDR()
	if err != nil {
		panic(err)
	}
	return bs
}

func (o XDRA) MarshalXDRInto(m *xdr.Marshaller) error {
	m.MarshalString(o.Name)
	m.MarshalUint64(uint64(o.BirthDay))
	m.MarshalString(o.Phone)
	m.MarshalUint32(uint32(o.Siblings))
	m.MarshalBool(o.Spouse)
	m.MarshalUint64(o.Money)
	return m.Error
}

func (o *XDRA) UnmarshalXDR(bs []byte) error {
	u := &xdr.Unmarshaller{Data: bs}
	return o.UnmarshalXDRFrom(u)
}
func (o *XDRA) UnmarshalXDRFrom(u *xdr.Unmarshaller) error {
	o.Name = u.UnmarshalString()
	o.BirthDay = int64(u.UnmarshalUint64())
	o.Phone = u.UnmarshalString()
	o.Siblings = int32(u.UnmarshalUint32())
	o.Spouse = u.UnmarshalBool()
	o.Money = u.UnmarshalUint64()
	return u.Error
}
