message

package
v0.0.0-...-3a5d5d8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 13, 2024 License: LGPL-3.0 Imports: 14 Imported by: 0

Documentation

Index

Constants

View Source
const (
	IP   = "127.0.0.1"
	Port = "30000"
)

Constants for client service port.

Variables

View Source
var (
	ServiceType_name = map[int32]string{
		0: "CONSENSUS",
		1: "STAKING",
		2: "DRAND",
		3: "CLIENT_SUPPORT",
	}
	ServiceType_value = map[string]int32{
		"CONSENSUS":      0,
		"STAKING":        1,
		"DRAND":          2,
		"CLIENT_SUPPORT": 3,
	}
)

Enum value maps for ServiceType.

View Source
var (
	MessageType_name = map[int32]string{
		0:  "NEWNODE_BEACON_STAKING",
		1:  "ANNOUNCE",
		2:  "PREPARE",
		3:  "PREPARED",
		4:  "COMMIT",
		5:  "COMMITTED",
		6:  "VIEWCHANGE",
		7:  "NEWVIEW",
		10: "DRAND_INIT",
		11: "DRAND_COMMIT",
		12: "LOTTERY_REQUEST",
	}
	MessageType_value = map[string]int32{
		"NEWNODE_BEACON_STAKING": 0,
		"ANNOUNCE":               1,
		"PREPARE":                2,
		"PREPARED":               3,
		"COMMIT":                 4,
		"COMMITTED":              5,
		"VIEWCHANGE":             6,
		"NEWVIEW":                7,
		"DRAND_INIT":             10,
		"DRAND_COMMIT":           11,
		"LOTTERY_REQUEST":        12,
	}
)

Enum value maps for MessageType.

View Source
var (
	LotteryRequest_Type_name = map[int32]string{
		0: "ENTER",
		1: "RESULT",
		2: "PICK_WINNER",
	}
	LotteryRequest_Type_value = map[string]int32{
		"ENTER":       0,
		"RESULT":      1,
		"PICK_WINNER": 2,
	}
)

Enum value maps for LotteryRequest_Type.

View Source
var File_message_proto protoreflect.FileDescriptor

Functions

func RegisterClientServiceServer

func RegisterClientServiceServer(s *grpc.Server, srv ClientServiceServer)

Types

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client is the client model for client service.

func NewClient

func NewClient(ip string) *Client

NewClient setups a Client given ip and port.

func (*Client) Close

func (client *Client) Close() error

Close closes the Client.

func (*Client) Process

func (client *Client) Process(message *Message) (*Response, error)

Process processes message.

type ClientServiceClient

type ClientServiceClient interface {
	Process(ctx context.Context, in *Message, opts ...grpc.CallOption) (*Response, error)
}

ClientServiceClient is the client API for ClientService service.

For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.

type ClientServiceServer

type ClientServiceServer interface {
	Process(context.Context, *Message) (*Response, error)
}

ClientServiceServer is the server API for ClientService service.

type ConsensusRequest

type ConsensusRequest struct {
	ViewId             uint64 `protobuf:"varint,1,opt,name=view_id,json=viewId,proto3" json:"view_id,omitempty"`
	BlockNum           uint64 `protobuf:"varint,2,opt,name=block_num,json=blockNum,proto3" json:"block_num,omitempty"`
	ShardId            uint32 `protobuf:"varint,3,opt,name=shard_id,json=shardId,proto3" json:"shard_id,omitempty"`
	BlockHash          []byte `protobuf:"bytes,4,opt,name=block_hash,json=blockHash,proto3" json:"block_hash,omitempty"`
	Block              []byte `protobuf:"bytes,5,opt,name=block,proto3" json:"block,omitempty"`
	SenderPubkey       []byte `protobuf:"bytes,6,opt,name=sender_pubkey,json=senderPubkey,proto3" json:"sender_pubkey,omitempty"`
	Payload            []byte `protobuf:"bytes,7,opt,name=payload,proto3" json:"payload,omitempty"`
	SenderPubkeyBitmap []byte `protobuf:"bytes,8,opt,name=sender_pubkey_bitmap,json=senderPubkeyBitmap,proto3" json:"sender_pubkey_bitmap,omitempty"`
	// contains filtered or unexported fields
}

func (*ConsensusRequest) Descriptor deprecated

func (*ConsensusRequest) Descriptor() ([]byte, []int)

Deprecated: Use ConsensusRequest.ProtoReflect.Descriptor instead.

func (*ConsensusRequest) GetBlock

func (x *ConsensusRequest) GetBlock() []byte

func (*ConsensusRequest) GetBlockHash

func (x *ConsensusRequest) GetBlockHash() []byte

func (*ConsensusRequest) GetBlockNum

func (x *ConsensusRequest) GetBlockNum() uint64

func (*ConsensusRequest) GetPayload

func (x *ConsensusRequest) GetPayload() []byte

func (*ConsensusRequest) GetSenderPubkey

func (x *ConsensusRequest) GetSenderPubkey() []byte

func (*ConsensusRequest) GetSenderPubkeyBitmap

func (x *ConsensusRequest) GetSenderPubkeyBitmap() []byte

func (*ConsensusRequest) GetShardId

func (x *ConsensusRequest) GetShardId() uint32

func (*ConsensusRequest) GetViewId

func (x *ConsensusRequest) GetViewId() uint64

func (*ConsensusRequest) ProtoMessage

func (*ConsensusRequest) ProtoMessage()

func (*ConsensusRequest) ProtoReflect

func (x *ConsensusRequest) ProtoReflect() protoreflect.Message

func (*ConsensusRequest) Reset

func (x *ConsensusRequest) Reset()

func (*ConsensusRequest) String

func (x *ConsensusRequest) String() string

type DrandRequest

type DrandRequest struct {

	// Deprecated: Do not use.
	ShardId uint32 `protobuf:"varint,1,opt,name=shard_id,json=shardId,proto3" json:"shard_id,omitempty"`
	// Deprecated: Do not use.
	SenderPubkey []byte `protobuf:"bytes,2,opt,name=sender_pubkey,json=senderPubkey,proto3" json:"sender_pubkey,omitempty"`
	// Deprecated: Do not use.
	BlockHash []byte `protobuf:"bytes,3,opt,name=block_hash,json=blockHash,proto3" json:"block_hash,omitempty"`
	// Deprecated: Do not use.
	Payload []byte `protobuf:"bytes,4,opt,name=payload,proto3" json:"payload,omitempty"`
	// contains filtered or unexported fields
}

func (*DrandRequest) Descriptor deprecated

func (*DrandRequest) Descriptor() ([]byte, []int)

Deprecated: Use DrandRequest.ProtoReflect.Descriptor instead.

func (*DrandRequest) GetBlockHash deprecated

func (x *DrandRequest) GetBlockHash() []byte

Deprecated: Do not use.

func (*DrandRequest) GetPayload deprecated

func (x *DrandRequest) GetPayload() []byte

Deprecated: Do not use.

func (*DrandRequest) GetSenderPubkey deprecated

func (x *DrandRequest) GetSenderPubkey() []byte

Deprecated: Do not use.

func (*DrandRequest) GetShardId deprecated

func (x *DrandRequest) GetShardId() uint32

Deprecated: Do not use.

func (*DrandRequest) ProtoMessage

func (*DrandRequest) ProtoMessage()

func (*DrandRequest) ProtoReflect

func (x *DrandRequest) ProtoReflect() protoreflect.Message

func (*DrandRequest) Reset

func (x *DrandRequest) Reset()

func (*DrandRequest) String

func (x *DrandRequest) String() string

type LotteryRequest

type LotteryRequest struct {

	// Deprecated: Do not use.
	Type LotteryRequest_Type `protobuf:"varint,1,opt,name=type,proto3,enum=message.LotteryRequest_Type" json:"type,omitempty"`
	// Deprecated: Do not use.
	PrivateKey string `protobuf:"bytes,2,opt,name=private_key,json=privateKey,proto3" json:"private_key,omitempty"`
	// Deprecated: Do not use.
	Amount int64 `protobuf:"varint,3,opt,name=amount,proto3" json:"amount,omitempty"`
	// contains filtered or unexported fields
}

func (*LotteryRequest) Descriptor deprecated

func (*LotteryRequest) Descriptor() ([]byte, []int)

Deprecated: Use LotteryRequest.ProtoReflect.Descriptor instead.

func (*LotteryRequest) GetAmount deprecated

func (x *LotteryRequest) GetAmount() int64

Deprecated: Do not use.

func (*LotteryRequest) GetPrivateKey deprecated

func (x *LotteryRequest) GetPrivateKey() string

Deprecated: Do not use.

func (*LotteryRequest) GetType deprecated

func (x *LotteryRequest) GetType() LotteryRequest_Type

Deprecated: Do not use.

func (*LotteryRequest) ProtoMessage

func (*LotteryRequest) ProtoMessage()

func (*LotteryRequest) ProtoReflect

func (x *LotteryRequest) ProtoReflect() protoreflect.Message

func (*LotteryRequest) Reset

func (x *LotteryRequest) Reset()

func (*LotteryRequest) String

func (x *LotteryRequest) String() string

type LotteryRequest_Type

type LotteryRequest_Type int32
const (
	// Deprecated: Do not use.
	LotteryRequest_ENTER LotteryRequest_Type = 0
	// Deprecated: Do not use.
	LotteryRequest_RESULT LotteryRequest_Type = 1
	// Deprecated: Do not use.
	LotteryRequest_PICK_WINNER LotteryRequest_Type = 2
)

func (LotteryRequest_Type) Descriptor

func (LotteryRequest_Type) Enum

func (LotteryRequest_Type) EnumDescriptor deprecated

func (LotteryRequest_Type) EnumDescriptor() ([]byte, []int)

Deprecated: Use LotteryRequest_Type.Descriptor instead.

func (LotteryRequest_Type) Number

func (LotteryRequest_Type) String

func (x LotteryRequest_Type) String() string

func (LotteryRequest_Type) Type

type LotteryResponse

type LotteryResponse struct {

	// Deprecated: Do not use.
	Players []string `protobuf:"bytes,2,rep,name=players,proto3" json:"players,omitempty"`
	// Deprecated: Do not use.
	Balances []string `protobuf:"bytes,3,rep,name=balances,proto3" json:"balances,omitempty"`
	// contains filtered or unexported fields
}

func (*LotteryResponse) Descriptor deprecated

func (*LotteryResponse) Descriptor() ([]byte, []int)

Deprecated: Use LotteryResponse.ProtoReflect.Descriptor instead.

func (*LotteryResponse) GetBalances deprecated

func (x *LotteryResponse) GetBalances() []string

Deprecated: Do not use.

func (*LotteryResponse) GetPlayers deprecated

func (x *LotteryResponse) GetPlayers() []string

Deprecated: Do not use.

func (*LotteryResponse) ProtoMessage

func (*LotteryResponse) ProtoMessage()

func (*LotteryResponse) ProtoReflect

func (x *LotteryResponse) ProtoReflect() protoreflect.Message

func (*LotteryResponse) Reset

func (x *LotteryResponse) Reset()

func (*LotteryResponse) String

func (x *LotteryResponse) String() string

type Message

type Message struct {
	ServiceType ServiceType `protobuf:"varint,1,opt,name=service_type,json=serviceType,proto3,enum=message.ServiceType" json:"service_type,omitempty"`
	Type        MessageType `protobuf:"varint,2,opt,name=type,proto3,enum=message.MessageType" json:"type,omitempty"`
	Signature   []byte      `protobuf:"bytes,3,opt,name=signature,proto3" json:"signature,omitempty"`
	// Types that are assignable to Request:
	//	*Message_Staking
	//	*Message_Consensus
	//	*Message_Drand
	//	*Message_Viewchange
	//	*Message_LotteryRequest
	Request isMessage_Request `protobuf_oneof:"request"`
	// contains filtered or unexported fields
}

This is universal message for all communication protocols. There are different Requests for different message types. As we introduce a new type of message just add a new MessageType and new type of request in Message.

The request field will be either one of the structure corresponding to the MessageType type.

func (*Message) Descriptor deprecated

func (*Message) Descriptor() ([]byte, []int)

Deprecated: Use Message.ProtoReflect.Descriptor instead.

func (*Message) GetConsensus

func (x *Message) GetConsensus() *ConsensusRequest

func (*Message) GetDrand deprecated

func (x *Message) GetDrand() *DrandRequest

Deprecated: Do not use.

func (*Message) GetLotteryRequest deprecated

func (x *Message) GetLotteryRequest() *LotteryRequest

Deprecated: Do not use.

func (*Message) GetRequest

func (m *Message) GetRequest() isMessage_Request

func (*Message) GetServiceType

func (x *Message) GetServiceType() ServiceType

func (*Message) GetSignature

func (x *Message) GetSignature() []byte

func (*Message) GetStaking deprecated

func (x *Message) GetStaking() *StakingRequest

Deprecated: Do not use.

func (*Message) GetType

func (x *Message) GetType() MessageType

func (*Message) GetViewchange

func (x *Message) GetViewchange() *ViewChangeRequest

func (*Message) ProtoMessage

func (*Message) ProtoMessage()

func (*Message) ProtoReflect

func (x *Message) ProtoReflect() protoreflect.Message

func (*Message) Reset

func (x *Message) Reset()

func (*Message) String

func (x *Message) String() string

type MessageType

type MessageType int32

MessageType indicates what is the type of this message.

const (
	// Deprecated: Do not use.
	MessageType_NEWNODE_BEACON_STAKING MessageType = 0
	MessageType_ANNOUNCE               MessageType = 1
	MessageType_PREPARE                MessageType = 2
	MessageType_PREPARED               MessageType = 3
	MessageType_COMMIT                 MessageType = 4
	MessageType_COMMITTED              MessageType = 5
	MessageType_VIEWCHANGE             MessageType = 6
	MessageType_NEWVIEW                MessageType = 7
	// Deprecated: Do not use.
	MessageType_DRAND_INIT MessageType = 10
	// Deprecated: Do not use.
	MessageType_DRAND_COMMIT MessageType = 11
	// Deprecated: Do not use.
	MessageType_LOTTERY_REQUEST MessageType = 12 // it should be either ENTER or GETPLAYERS but it will be removed later.
)

func (MessageType) Descriptor

func (MessageType) Enum

func (x MessageType) Enum() *MessageType

func (MessageType) EnumDescriptor deprecated

func (MessageType) EnumDescriptor() ([]byte, []int)

Deprecated: Use MessageType.Descriptor instead.

func (MessageType) Number

func (x MessageType) Number() protoreflect.EnumNumber

func (MessageType) String

func (x MessageType) String() string

func (MessageType) Type

type Message_Consensus

type Message_Consensus struct {
	Consensus *ConsensusRequest `protobuf:"bytes,5,opt,name=consensus,proto3,oneof"`
}

type Message_Drand

type Message_Drand struct {
	// Deprecated: Do not use.
	Drand *DrandRequest `protobuf:"bytes,6,opt,name=drand,proto3,oneof"`
}

type Message_LotteryRequest

type Message_LotteryRequest struct {
	// Refactor this later after demo.
	//
	// Deprecated: Do not use.
	LotteryRequest *LotteryRequest `protobuf:"bytes,8,opt,name=lottery_request,json=lotteryRequest,proto3,oneof"`
}

type Message_Staking

type Message_Staking struct {
	// Deprecated: Do not use.
	Staking *StakingRequest `protobuf:"bytes,4,opt,name=staking,proto3,oneof"`
}

type Message_Viewchange

type Message_Viewchange struct {
	Viewchange *ViewChangeRequest `protobuf:"bytes,7,opt,name=viewchange,proto3,oneof"`
}

type Response

type Response struct {
	ServiceType ServiceType `protobuf:"varint,1,opt,name=service_type,json=serviceType,proto3,enum=message.ServiceType" json:"service_type,omitempty"`
	Type        MessageType `protobuf:"varint,2,opt,name=type,proto3,enum=message.MessageType" json:"type,omitempty"`
	// Types that are assignable to Response:
	//	*Response_LotteryResponse
	Response isResponse_Response `protobuf_oneof:"response"`
	// contains filtered or unexported fields
}

func (*Response) Descriptor deprecated

func (*Response) Descriptor() ([]byte, []int)

Deprecated: Use Response.ProtoReflect.Descriptor instead.

func (*Response) GetLotteryResponse deprecated

func (x *Response) GetLotteryResponse() *LotteryResponse

Deprecated: Do not use.

func (*Response) GetResponse

func (m *Response) GetResponse() isResponse_Response

func (*Response) GetServiceType

func (x *Response) GetServiceType() ServiceType

func (*Response) GetType

func (x *Response) GetType() MessageType

func (*Response) ProtoMessage

func (*Response) ProtoMessage()

func (*Response) ProtoReflect

func (x *Response) ProtoReflect() protoreflect.Message

func (*Response) Reset

func (x *Response) Reset()

func (*Response) String

func (x *Response) String() string

type Response_LotteryResponse

type Response_LotteryResponse struct {
	// Deprecated: Do not use.
	LotteryResponse *LotteryResponse `protobuf:"bytes,3,opt,name=lottery_response,json=lotteryResponse,proto3,oneof"`
}

type Server

type Server struct {
	CreateTransactionForEnterMethod func(int64, string) error
	GetResult                       func(string) ([]string, []*big.Int)
	CreateTransactionForPickWinner  func() error
	// contains filtered or unexported fields
}

Server is the Server struct for client service package.

func NewServer

func NewServer(
	CreateTransactionForEnterMethod func(int64, string) error,
	GetResult func(string) ([]string, []*big.Int),
	CreateTransactionForPickWinner func() error) *Server

NewServer creates new Server which implements ClientServiceServer interface.

func (*Server) Process

func (s *Server) Process(ctx context.Context, message *Message) (*Response, error)

Process processes the Message and returns Response

func (*Server) Start

func (s *Server) Start() (*grpc.Server, error)

Start starts the Server on given ip and port.

func (*Server) Stop

func (s *Server) Stop()

Stop stops the server.

type ServiceType

type ServiceType int32

ServiceType indicates which service used to generate this message.

const (
	ServiceType_CONSENSUS ServiceType = 0
	// Deprecated: Do not use.
	ServiceType_STAKING ServiceType = 1
	// Deprecated: Do not use.
	ServiceType_DRAND          ServiceType = 2
	ServiceType_CLIENT_SUPPORT ServiceType = 3
)

func (ServiceType) Descriptor

func (ServiceType) Enum

func (x ServiceType) Enum() *ServiceType

func (ServiceType) EnumDescriptor deprecated

func (ServiceType) EnumDescriptor() ([]byte, []int)

Deprecated: Use ServiceType.Descriptor instead.

func (ServiceType) Number

func (x ServiceType) Number() protoreflect.EnumNumber

func (ServiceType) String

func (x ServiceType) String() string

func (ServiceType) Type

type StakingRequest

type StakingRequest struct {

	// Deprecated: Do not use.
	Transaction []byte `protobuf:"bytes,1,opt,name=transaction,proto3" json:"transaction,omitempty"`
	// Deprecated: Do not use.
	NodeId string `protobuf:"bytes,2,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"`
	// contains filtered or unexported fields
}

Staking Request from new node to beacon node.

func (*StakingRequest) Descriptor deprecated

func (*StakingRequest) Descriptor() ([]byte, []int)

Deprecated: Use StakingRequest.ProtoReflect.Descriptor instead.

func (*StakingRequest) GetNodeId deprecated

func (x *StakingRequest) GetNodeId() string

Deprecated: Do not use.

func (*StakingRequest) GetTransaction deprecated

func (x *StakingRequest) GetTransaction() []byte

Deprecated: Do not use.

func (*StakingRequest) ProtoMessage

func (*StakingRequest) ProtoMessage()

func (*StakingRequest) ProtoReflect

func (x *StakingRequest) ProtoReflect() protoreflect.Message

func (*StakingRequest) Reset

func (x *StakingRequest) Reset()

func (*StakingRequest) String

func (x *StakingRequest) String() string

type UnimplementedClientServiceServer

type UnimplementedClientServiceServer struct {
}

UnimplementedClientServiceServer can be embedded to have forward compatible implementations.

func (*UnimplementedClientServiceServer) Process

type ViewChangeRequest

type ViewChangeRequest struct {
	ViewId        uint64 `protobuf:"varint,1,opt,name=view_id,json=viewId,proto3" json:"view_id,omitempty"`
	BlockNum      uint64 `protobuf:"varint,2,opt,name=block_num,json=blockNum,proto3" json:"block_num,omitempty"`
	ShardId       uint32 `protobuf:"varint,3,opt,name=shard_id,json=shardId,proto3" json:"shard_id,omitempty"`
	SenderPubkey  []byte `protobuf:"bytes,4,opt,name=sender_pubkey,json=senderPubkey,proto3" json:"sender_pubkey,omitempty"`
	LeaderPubkey  []byte `protobuf:"bytes,5,opt,name=leader_pubkey,json=leaderPubkey,proto3" json:"leader_pubkey,omitempty"`
	Payload       []byte `protobuf:"bytes,6,opt,name=payload,proto3" json:"payload,omitempty"`                                  // message payload: either m1 type or m2 type
	ViewchangeSig []byte `protobuf:"bytes,7,opt,name=viewchange_sig,json=viewchangeSig,proto3" json:"viewchange_sig,omitempty"` // signature on payload
	ViewidSig     []byte `protobuf:"bytes,8,opt,name=viewid_sig,json=viewidSig,proto3" json:"viewid_sig,omitempty"`             // signature on view_id
	// below is for newview message only
	// only need 1 valid m1 type message which is in payload
	M2Aggsigs     []byte `protobuf:"bytes,9,opt,name=m2_aggsigs,json=m2Aggsigs,proto3" json:"m2_aggsigs,omitempty"` // m2: |nil|
	M2Bitmap      []byte `protobuf:"bytes,10,opt,name=m2_bitmap,json=m2Bitmap,proto3" json:"m2_bitmap,omitempty"`
	M3Aggsigs     []byte `protobuf:"bytes,11,opt,name=m3_aggsigs,json=m3Aggsigs,proto3" json:"m3_aggsigs,omitempty"` // m3: |viewID|
	M3Bitmap      []byte `protobuf:"bytes,12,opt,name=m3_bitmap,json=m3Bitmap,proto3" json:"m3_bitmap,omitempty"`
	PreparedBlock []byte `protobuf:"bytes,13,opt,name=prepared_block,json=preparedBlock,proto3" json:"prepared_block,omitempty"`
	// contains filtered or unexported fields
}

func (*ViewChangeRequest) Descriptor deprecated

func (*ViewChangeRequest) Descriptor() ([]byte, []int)

Deprecated: Use ViewChangeRequest.ProtoReflect.Descriptor instead.

func (*ViewChangeRequest) GetBlockNum

func (x *ViewChangeRequest) GetBlockNum() uint64

func (*ViewChangeRequest) GetLeaderPubkey

func (x *ViewChangeRequest) GetLeaderPubkey() []byte

func (*ViewChangeRequest) GetM2Aggsigs

func (x *ViewChangeRequest) GetM2Aggsigs() []byte

func (*ViewChangeRequest) GetM2Bitmap

func (x *ViewChangeRequest) GetM2Bitmap() []byte

func (*ViewChangeRequest) GetM3Aggsigs

func (x *ViewChangeRequest) GetM3Aggsigs() []byte

func (*ViewChangeRequest) GetM3Bitmap

func (x *ViewChangeRequest) GetM3Bitmap() []byte

func (*ViewChangeRequest) GetPayload

func (x *ViewChangeRequest) GetPayload() []byte

func (*ViewChangeRequest) GetPreparedBlock

func (x *ViewChangeRequest) GetPreparedBlock() []byte

func (*ViewChangeRequest) GetSenderPubkey

func (x *ViewChangeRequest) GetSenderPubkey() []byte

func (*ViewChangeRequest) GetShardId

func (x *ViewChangeRequest) GetShardId() uint32

func (*ViewChangeRequest) GetViewId

func (x *ViewChangeRequest) GetViewId() uint64

func (*ViewChangeRequest) GetViewchangeSig

func (x *ViewChangeRequest) GetViewchangeSig() []byte

func (*ViewChangeRequest) GetViewidSig

func (x *ViewChangeRequest) GetViewidSig() []byte

func (*ViewChangeRequest) ProtoMessage

func (*ViewChangeRequest) ProtoMessage()

func (*ViewChangeRequest) ProtoReflect

func (x *ViewChangeRequest) ProtoReflect() protoreflect.Message

func (*ViewChangeRequest) Reset

func (x *ViewChangeRequest) Reset()

func (*ViewChangeRequest) String

func (x *ViewChangeRequest) String() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL