@@ -206,6 +206,28 @@ struct FieldList
206206 }
207207};
208208
209+ std::string AccessorType (kj::StringPtr base_name, const Field& field)
210+ {
211+ const auto & f = field.param_is_set ? field.param : field.result ;
212+ const auto field_name = f.getProto ().getName ();
213+ const auto field_type = f.getType ();
214+
215+ std::ostringstream out;
216+ out << " Accessor<" << base_name << " _fields::" << Cap (field_name) << " , " ;
217+ if (!field.param_is_set ) {
218+ out << " FIELD_OUT" ;
219+ } else if (field.result_is_set ) {
220+ out << " FIELD_IN | FIELD_OUT" ;
221+ } else {
222+ out << " FIELD_IN" ;
223+ }
224+ if (field.optional ) out << " | FIELD_OPTIONAL" ;
225+ if (field.requested ) out << " | FIELD_REQUESTED" ;
226+ if (BoxedType (field_type)) out << " | FIELD_BOXED" ;
227+ out << " >" ;
228+ return out.str ();
229+ }
230+
209231// src_file is path to .capnp file to generate stub code from.
210232//
211233// src_prefix can be used to generate outputs in a different directory than the
@@ -539,20 +561,6 @@ static void Generate(kj::StringPtr src_prefix,
539561
540562 const auto & f = field.param_is_set ? field.param : field.result ;
541563 auto field_name = f.getProto ().getName ();
542- auto field_type = f.getType ();
543-
544- std::ostringstream field_flags;
545- if (!field.param_is_set ) {
546- field_flags << " FIELD_OUT" ;
547- } else if (field.result_is_set ) {
548- field_flags << " FIELD_IN | FIELD_OUT" ;
549- } else {
550- field_flags << " FIELD_IN" ;
551- }
552- if (field.optional ) field_flags << " | FIELD_OPTIONAL" ;
553- if (field.requested ) field_flags << " | FIELD_REQUESTED" ;
554- if (BoxedType (field_type)) field_flags << " | FIELD_BOXED" ;
555-
556564 add_accessor (field_name);
557565
558566 std::ostringstream fwd_args;
@@ -579,8 +587,7 @@ static void Generate(kj::StringPtr src_prefix,
579587 client_invoke << " MakeClientParam<" ;
580588 }
581589
582- client_invoke << " Accessor<" << base_name << " _fields::" << Cap (field_name) << " , "
583- << field_flags.str () << " >>(" ;
590+ client_invoke << AccessorType (base_name, field) << " >(" ;
584591
585592 if (field.retval ) {
586593 client_invoke << field_name;
@@ -596,8 +603,7 @@ static void Generate(kj::StringPtr src_prefix,
596603 } else {
597604 server_invoke_start << " MakeServerField<" << field.args ;
598605 }
599- server_invoke_start << " , Accessor<" << base_name << " _fields::" << Cap (field_name) << " , "
600- << field_flags.str () << " >>(" ;
606+ server_invoke_start << " , " << AccessorType (base_name, field) << " >(" ;
601607 server_invoke_end << " )" ;
602608 }
603609
0 commit comments