proto-filter
Configuration
All samples here assume the following content in simple.proto :
syntax = "proto3";
message SearchRequest {
string query = 1;
int32 page_number = 2;
int32 result_per_page = 3;
}
message SearchResponse {
repeated Result results = 1;
SearchRequest request = 2;
}
message Result {
string url = 1;
string title = 2;
repeated string snippets = 3;
}
Configuration contain 2 sections :
include:
- simple.proto:
- SearchResponse
exclude:
- simple.proto:
- SearchResponse:
- useless
- SearchRequest:
- page_number
- Result:
- snippets
- The default is to include nothing (An empty file is generated)
- Leafs specified in
include
are included for example the simple.proto/SearchResponse
message will be included.
- Parents of included elements are included (A
simple.proto
file will be created) but not their content
- Anything inside an included element is implicitely included (Fields & Sub messages)
- Any message referenced by an included element is included implicitely (Recursively)
The file hierarchy
Files are specified by their file names and path from the root of the proto path.
Specifying fields
Fields can be specified in multiple ways:
- Designating all fields with a start (
*
)
- By field name (
result_per_page
)
- By field number (
3
)
- Designating all fields with a start (
*
)
Selecting the fields of an implicitly included message
This specific configuration:
include:
- simple.proto:
- SearchRequest:
- query
Will produce :
syntax = "proto3";
message SearchRequest {
string query = 1;
}
But
include:
- simple.proto:
- SearchResponse
- SearchRequest:
- query
Will keep all fields of SearchRequest
because SearchResponse
include a field of this type so it's implicitely including all the fields.
To keep only query
all fields need to be explicitely excluded:
include:
- simple.proto:
- SearchResponse
- SearchRequest:
- query
exclude:
- simple.proto:
- SearchRequest:
- *