Skip to content

trpc-ecosystem/go-fbs

Repository files navigation

English | 中文

fbs

A parser for flatbuffers in Go.

Getting Started

  1. Import package fbs:
import "trpc.group/trpc-go/fbs"
  1. Pass in the flatbuffers file list you want to parse. Create a Parser and call ParseFiles.
filenames := []string{
    "./file1.fbs", // Pass in a list of flatbuffers files. 
    "./file2.fbs",
}
p := fbs.NewParser()
fds, err := p.ParseFiles(filenames...)
fd1 := fds[0] // The parsed result(descriptor) of file1.fbs
fd2 := fds[1] // The parsed result(descriptor) of file2.fbs

You can access the resulting descriptors from fbs and get rich information about every method definition of rpc services, e.g. method names, input/output type, client/server streaming, etc.

The descriptor SchemaDesc for every file has the following fields:

// SchemaDesc describes a complete .fbs file.
type SchemaDesc struct {
	// Schema stores the root node of the AST.
	Schema *ast.SchemaNode
	// Name stores the .fbs file name.
	Name string
	// Namespace of schema will change in the course of processing each decl, these will be stored
	// in this slice. Decls of table/struct/enum/union will set their own namespaces to be the last
	// namespace in this slice.
	// See parseResult.createSchemaDescriptor.
	Namespaces []string
	// Root stores root_type declaration in flatbuffers file.
	Root string
	// FileExt stores file_extension declaration in flatbuffers file.
	FileExt string
	// FileIdent stores file_identifier declaration in flatbuffers file.
	FileIdent string
	// Attrs stores attributes definitions in flatbuffers file.
	Attrs []string
	// Includes stores all included file names.
	Includes []string
	// Dependencies stores all descriptors corresponding to included files.
	Dependencies []*SchemaDesc
	// Tables stores all table descriptors.
	Tables []*TableDesc
	// Structs stores all struct descriptors.
	Structs []*StructDesc
	// Enums stores all enum descriptors.
	Enums []*EnumDesc
	// Unions stores all union descriptors.
	Unions []*UnionDesc
	// RPCs stores all rpc service descriptors.
	RPCs []*RPCDesc
}

Through accessing these fields such as RPCs, you can get information defined in flatbuffers to get related work done(e.g. generate stub files for rpc services).

Project Structure

.
├── desc.go         # Definitions of descriptors for all kinds of node. 
├── desc_test.go    
├── doc.go          
├── docs            # Documents of implementation.
├── errors.go       # Error handling.
├── errors_test.go  
├── fbsfiles        # Places .fbs for testing. 
├── fbs.y           # Hand-written according to the grammar of flatbuffers. 
├── fbs.y.go        # Generated by fbs.y, used to parse token stream to AST.
├── go.mod          
├── go.sum          
├── internal        
│   └── ast         # Stores definitions and constructions of nodes in AST. 
├── lexer.go        # lexer implementation.
├── lexer_test.go   
├── linker.go       # linker implementation.
├── linker_test.go  
├── parse_result.go # Definition for parsed result.
├── parser.go       # parser implementation.
├── parser_test.go  
├── reader.go       # reader implementation.
├── README.md       
└── scope.go        # scope implementation.

Further information see implementation details

Used in Practice

This project enables trpc-go to have flatbuffers support.

Copyright

The copyright notice pertaining to the Tencent code in this repo was previously in the name of “THL A29 Limited.” That entity has now been de-registered. You should treat all previously distributed copies of the code as if the copyright notice was in the name of “Tencent.”

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •