1- package main
1+ package pbthrift
22
33import (
44 "io/fs"
@@ -19,12 +19,14 @@ type FileInfo struct {
1919type SubGenerator interface {
2020 Parse () (newFiles []FileInfo , err error ) // return relative file path to parsed file
2121 Sink () (err error )
22+ Pipe () (res []byte , err error )
2223 FilePath () (res string )
2324}
2425
2526// Main generator for all idl files, responsible for initialize all SubGenerator for each file
2627type Generator interface {
2728 Generate () (err error )
29+ Pipe () (res []byte , err error )
2830}
2931
3032func NewGenerator (conf * RunnerConfig ) (res Generator , err error ) {
@@ -35,7 +37,7 @@ func NewGenerator(conf *RunnerConfig) (res Generator, err error) {
3537 }
3638
3739 if conf .Task == TASK_CONTENT_PROTO2THRIFT || conf .Task == TASK_CONTENT_THRIFT2PROTO {
38- gen .initSubGeneratorForRawContent ()
40+ err = gen .initSubGeneratorForRawContent ()
3941 } else {
4042 _ , filename := filepath .Split (conf .InputPath )
4143
@@ -90,6 +92,22 @@ func (g *generator) Generate() (err error) {
9092 return
9193}
9294
95+ // Pipe the transformed result to return value, since the scenario for Pipe is using protobuf-thrift as a lib, currently not support recursive transform.
96+ func (g * generator ) Pipe () (res []byte , err error ) {
97+ for _ , sub := range g .subGeneratorMap {
98+ if _ , err = sub .Parse (); err != nil {
99+ logger .Fatalf ("Error occurred when parsing file %v" , sub .FilePath ())
100+ return
101+ }
102+ if res , err = sub .Pipe (); err != nil {
103+ logger .Fatalf ("Error occurred when generating file %v" , sub .FilePath (), err )
104+ return
105+ }
106+ break
107+ }
108+ return
109+ }
110+
93111func (g * generator ) absPathIsIdl (absPath string ) (res bool , err error ) {
94112 suffix := ""
95113 if g .conf .Task == TASK_CONTENT_PROTO2THRIFT || g .conf .Task == TASK_FILE_PROTO2THRIFT {
@@ -200,7 +218,7 @@ func (g *generator) initSubGenerator(fileInfos []FileInfo) (err error) {
200218
201219 if g .conf .Task == TASK_FILE_PROTO2THRIFT {
202220 var generator SubGenerator
203- conf := & thriftGeneratorConfig {
221+ conf := & ThriftGeneratorConfig {
204222 taskType : g .conf .Task ,
205223 filePath : path ,
206224 fileName : filename ,
@@ -219,7 +237,7 @@ func (g *generator) initSubGenerator(fileInfos []FileInfo) (err error) {
219237 g .subGeneratorMap [path ] = generator
220238 } else if g .conf .Task == TASK_FILE_THRIFT2PROTO {
221239 var generator SubGenerator
222- conf := & protoGeneratorConfig {
240+ conf := & ProtoGeneratorConfig {
223241 taskType : g .conf .Task ,
224242 filePath : path ,
225243 fileName : filename ,
@@ -250,7 +268,7 @@ func (g *generator) initSubGeneratorForRawContent() (err error) {
250268 })
251269 if g .conf .Task == TASK_CONTENT_PROTO2THRIFT {
252270 var generator SubGenerator
253- conf := & thriftGeneratorConfig {
271+ conf := & ThriftGeneratorConfig {
254272 taskType : g .conf .Task ,
255273 rawContent : g .conf .RawContent ,
256274 filePath : path ,
@@ -262,12 +280,13 @@ func (g *generator) initSubGeneratorForRawContent() (err error) {
262280 }
263281 generator , err = NewThriftGenerator (conf )
264282 if err != nil {
265- return
283+ logger .Errorf ("NewThriftGenerator failed, %s" , err )
284+ return err
266285 }
267286 g .subGeneratorMap [path ] = generator
268287 } else if g .conf .Task == TASK_CONTENT_THRIFT2PROTO {
269288 var generator SubGenerator
270- conf := & protoGeneratorConfig {
289+ conf := & ProtoGeneratorConfig {
271290 taskType : g .conf .Task ,
272291 rawContent : g .conf .RawContent ,
273292 filePath : path ,
@@ -279,7 +298,8 @@ func (g *generator) initSubGeneratorForRawContent() (err error) {
279298 }
280299 generator , err = NewProtoGenerator (conf )
281300 if err != nil {
282- return
301+ logger .Errorf ("NewProtoGenerator failed, %s" , err )
302+ return err
283303 }
284304 g .subGeneratorMap [path ] = generator
285305 }
0 commit comments