You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: casttype.pb.go
    path of file: ./repos/gitkube/vendor/github.com/gogo/protobuf/test/casttype/combos/both
    
    the code of the file until where you have to start completion: // Code generated by protoc-gen-gogo. DO NOT EDIT.
// source: combos/both/casttype.proto

package casttype

import proto "github.com/gogo/protobuf/proto"
import fmt "fmt"
import math "math"
import _ "github.com/gogo/protobuf/gogoproto"

import github_com_gogo_protobuf_test_casttype "github.com/gogo/protobuf/test/casttype"

import github_com_gogo_protobuf_protoc_gen_gogo_descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor"
import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto"
import compress_gzip "compress/gzip"
import bytes "bytes"
import io_ioutil "io/ioutil"

import strings "strings"
import reflect "reflect"
import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys"

import encoding_binary "encoding/binary"

import io "io"

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package

type Castaway struct {
	Int32Ptr             *int32                                                                                                      `protobuf:"varint,1,opt,name=Int32Ptr,casttype=int32" json:"Int32Ptr,omitempty"`
	Int32                int32                                                                                                       `protobuf:"varint,2,opt,name=Int32,casttype=int32" json:"Int32"`
	MyUint64Ptr          *github_com_gogo_protobuf_test_casttype.MyUint64Type                                                        `protobuf:"varint,3,opt,name=MyUint64Ptr,casttype=
    
func (m *Castaway) MarshalTo(dAtA []byte) (int, error) {
	var i int
	_ = i
	var l int
	_ = l
	if m.Int32Ptr != nil {
		dAtA[i] = 0x8
		i++
		i = encodeVarintCasttype(dAtA, i, uint64(*m.Int32Ptr))
	}
	dAtA[i] = 0x10
	i++
	i = encodeVarintCasttype(dAtA, i, uint64(m.Int32))
	if m.MyUint64Ptr != nil {
		dAtA[i] = 0x18
		i++
		i = encodeVarintCasttype(dAtA, i, uint64(*m.MyUint64Ptr))
	}
	dAtA[i] = 0x20
	i++
	i = encodeVarintCasttype(dAtA, i, uint64(m.MyUint64))
	if m.MyFloat32Ptr != nil {
		dAtA[i] = 0x2d
		i++
		encoding_binary.LittleEndian.PutUint32(dAtA[i:], uint32(math.Float32bits(float32(*m.MyFloat32Ptr))))
		i += 4
	}
	dAtA[i] = 0x35
	i++
	encoding_binary.LittleEndian.PutUint32(dAtA[i:], uint32(math.Float32bits(float32(m.MyFloat32))))
	i += 4
	if m.MyFloat64Ptr != nil {
		dAtA[i] = 0x39
		i++
		encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(*m.MyFloat64Ptr))))
		i += 8
	}
	dAtA[i] = 0x41
	i++
	encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(m.MyFloat64))))
	i += 8
	if m.MyBytes != nil {
		dAtA[i] = 0x4a
		i++
		i = encodeVarintCasttype(dAtA, i, uint64(len(m.MyBytes)))
		i += copy(dAtA[i:], m.MyBytes)
	}
	if m.NormalBytes != nil {
		dAtA[i] = 0x52
		i++
		i = encodeVarintCasttype(dAtA, i, uint64(len(m.NormalBytes)))
		i += copy(dAtA[i:], m.NormalBytes)
	}
	if len(m.MyUint64S) > 0 {
		for _, num := range m.MyUint64S {
			dAtA[i] = 0x58
			i++
			i = encodeVarintCasttype(dAtA, i, uint64(num))
		}
	}
	if len(m.MyMap) > 0 {
		for k := range m.MyMap {
			dAtA[i] = 0x62
			i++
			v := m.MyMap[k]
			mapSize := 1 + len(k) + sovCasttype(uint64(len(k))) + 1 + sovCasttype(uint64(v))
			i = encodeVarintCasttype(dAtA, i, uint64(mapSize))
			dAtA[i] = 0xa
			i++
			i = encodeVarintCasttype(dAtA, i, uint64(len(k)))
			i += copy(dAtA[i:], k)
			dAtA[i] = 0x10
			i++
			i = encodeVarintCasttype(dAtA, i, uint64(v))
		}
	}
	if len(m.MyCustomMap) > 0 {
		for k := range m.MyCustomMap {
			dAtA[i] = 0x6a
			i++
			v := m.MyCustomMap[k]
			mapSize := 1 + len(k) + sovCasttype(uint64(len(k))) + 1 + sovCasttype(uint64(v))
			i = encodeVarintCasttype(dAtA, i, uint64(mapSize))
			dAtA[i] = 0xa
			i++
			i = encodeVarintCasttype(dAtA, i, uint64(len(k)))
			i += copy(dAtA[i:], k)
			dAtA[i] = 0x10
			i++
			i = encodeVarintCasttype(dAtA, i, uint64(v))
		}
	}
	if len(m.MyNullableMap) > 0 {
		for k := range m.MyNullableMap {
			dAtA[i] = 0x72
			i++
			v := m.MyNullableMap[k]
			msgSize := 0
			if v != nil {
				msgSize = v.Size()
				msgSize += 1 + sovCasttype(uint64(msgSize))
			}
			mapSize := 1 + sovCasttype(uint64(k)) + msgSize
			i = encodeVarintCasttype(dAtA, i, uint64(mapSize))
			dAtA[i] = 0x8
			i++
			i = encodeVarintCasttype(dAtA, i, uint64(k))
			if v != nil {
				dAtA[i] = 0x12
				i++
				i = encodeVarintCasttype(dAtA, i, uint64(v.Size()))
				n1, err := v.MarshalTo(dAtA[i:])
				if err != nil {
					return 0, err
				}
				i += n1
			}
		}
	}
	if len(m.MyEmbeddedMap) > 0 {
		for k := range m.MyEmbeddedMap {
			dAtA[i] = 0x7a
			i++
			v := m.MyEmbeddedMap[k]
			msgSize := 0
			if (&v) != nil {
				msgSize = (&v).Size()
				msgSize += 1 + sovCasttype(uint64(msgSize))
			}
			mapSize := 1 + sovCasttype(uint64(k)) + msgSize
			i = encodeVarintCasttype(dAtA, i, uint64(mapSize))
			dAtA[i] = 0x8
			i++
			i = encodeVarintCasttype(dAtA, i, uint64(k))
			dAtA[i] = 0x12
			i++
			i = encodeVarintCasttype(dAtA, i, uint64((&v).Size()))
			n2, err := (&v).MarshalTo(dAtA[i:])
			if err != nil {
				return 0, err
			}
			i += n2
		}
	}
	if m.String_ != nil {
		dAtA[i] = 0x82
		i++
		dAtA[i] = 0x1
		i++
		i = encodeVarintCasttype(dAtA, i, uint64(len(*m.String_)))
		i += copy(dAtA[i:], *m.String_)
	}
	if m.XXX_unrecognized != nil {
		i += copy(dAtA[i:], m.XXX_unrecognized)
	}
	return i, nil
}