Learn R Programming

RProtoBuf (version 0.4.22)

Message-class: Class "Message"

Description

R representation of protocol buffer messages. This is a thin wrapper around the Message c++ class that holds the actual message as an external pointer.

Arguments

Objects from the Class

Objects are typically created by the new function invoked on a Descriptor object.

Slots

pointer:

external pointer to the c++ Message object

type:

fully qualified name of the message type

Methods

as.character

signature(x = "Message"): returns the debug string of the message. This is built from a call to the DebugString method of the Message object

toString

signature(x = "Message"): same as as.character

toTextFormat

signature(x = "Message"): returns the TextFormat of the message. This is built from a call to TextFormat::PrintToString with the Message object

toDebugString

signature(x = "Message"): same as as.character

toJSON

signature(x = "Message"): returns the JSON representation of the message. This is built from a call to the google::protobuf::util::MessageToJsonString method and accepts two arguments preserve_proto_field_names - if FALSE (the default) convert field names to camelCase always_print_primitive_fields - whether to return the default value for missing primitive fields (default false)

$<-

signature(x = "Message"): set the value of a field of the message.

$

signature(x = "Message"): gets the value of a field. Primitive types are brought back to R as R objects of the closest matching R type. Messages are brought back as instances of the Message class.

[[

signature(x = "Message"): extracts a field identified by its name or declared tag number

[[<-

signature(x = "Message"): replace the value of a field identified by its name or declared tag number

serialize

signature(object = "Message"): serialize a message. If the "connection" argument is NULL, the payload of the message is returned as a raw vector, if the "connection" argument is a binary writable connection, the payload is written into the connection. If "connection" is a character vector, the message is sent to the file (in binary format).

show

signature(object = "Message"): displays a short text about the message

update

signature(object = "Message"): set several fields of the message at once

length

signature(x = "Message"): The number of fields actually contained in the message. A field counts in these two situations: the field is repeated and the field size is greater than 0, the field is not repeated and the message has the field.

setExtension

signature(object = "Message"): set an extension field of the Message.

getExtension

signature(object = "Message"): get the value of an extension field of the Message.

str

signature(object = "Message"): displays the structure of the message

identical

signature(x = "Message", y = "Message"): Test if two messages are exactly identical

==

signature(e1 = "Message", e2 = "Message"): Same as identical

!=

signature(e1 = "Message", e2 = "Message"): Negation of identical

all.equal

signature(e1 = "Message", e2 = "Message"): Test near equality

names

signature(x = "Message"): extracts the names of the message.

Author

Romain Francois <francoisromain@free.fr>

References

The Message class from the C++ proto library.

See Also

P creates objects of class Descriptor that can be used to create messages.

Examples

Run this code
if (FALSE) {
# example proto file supplied with this package
proto.file <- system.file( "proto", "addressbook.proto", package = "RProtoBuf" )

# reading a proto file and creating the descriptor
Person <- P( "tutorial.Person", file = proto.file )
}
 Person <- P("tutorial.Person") 

PhoneNumber <- P( "tutorial.Person.PhoneNumber" )

# creating a prototype message from the descriptor
p <- new( Person )
p$email # not set, returns default value
p$id    # not set, returns default value
as.character( p ) # empty
has( p, "email" ) # is the "email" field set
has( p, "phone" ) # is the "email" field set
length( p )       # number of fields actually set

# update several fields at once
romain <- update( new( Person ),
	email = "francoisromain@free.fr",
	id = 1,
	name = "Romain Francois",
	phone = new( PhoneNumber , number = "+33(0)...", type = "MOBILE" )
	)

# supply parameters to the constructor
dirk <- new( Person,
	email = "edd@debian.org",
	id = 2,
	name = "Dirk Eddelbuettel" )
# update the phone repeated field with a list of PhoneNumber messages
dirk$phone <- list(
	new( PhoneNumber , number = "+01...", type = "MOBILE" ),
	new( PhoneNumber , number = "+01...", type = "HOME" ) )

# with/within style
saptarshi <- within( new(Person), {
	id <- 3
	name <- "Saptarshi Guha"
	email <- "saptarshi.guha@gmail.com"
} )

# make an addressbook
book <- new( tutorial.AddressBook, person = list( romain, dirk, saptarshi ) )

# serialize the message to a file
tf <- tempfile( )
serialize( book, tf )

# the payload of the message
serialize( book, NULL )

# read the file into a new message
m <- tutorial.AddressBook$read( tf )
writeLines( as.character( m ) )
sapply( m$person, function(p) p$name )

Run the code above in your browser using DataLab