Lorawan-stack: рдЧреЛрдЧреЛ рдкреНрд░реЛрдЯреЛ рдкреНрд▓рдЧрдЗрди рднрд╡рд┐рд╖реНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рдЬреВрди 2020  ┬╖  15рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: TheThingsNetwork/lorawan-stack

рд╕рд╛рд░рд╛рдВрд╢

https://github.com/gogo/protobuf рдЕрдм рдФрд░ рдирд╣реАрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ https://github.com/gogo/protobuf/issues/691 (рд╡рд░реНрддрдорд╛рди рдореЗрдВ)

рд╣рдореЗрдВ рдпрд╣ рдХреНрдпреЛрдВ рдЪрд╛рд╣рд┐рдпреЗ?

рдпрд╣ рд╣рдорд╛рд░реА рдирд┐рд░реНрднрд░рддрд╛ рд╣реИ, рдЬреЛ рдирдП golang/protobuf рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдкреИрдХреЗрдЬ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдкрдиреА рдкреНрд░рддреНрдпрдХреНрд╖ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ golang/protobuf рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреИрдХреЗрдЬ рддреЛрдбрд╝рдирд╛

рд╡рд╣рд╛рдВ рдкрд╣рд▓реЗ рд╕реЗ рдХреНрдпрд╛ рд╣реИ? рдЕрдм рдЖрдк рдХреНрдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ?

gogo/protobuf рдирд┐рд░реНрднрд░рддрд╛

рдХреНрдпрд╛ рдЪреАрдЬрд╝ рдЫреВрдЯ рд░рд╣реА рд╣реИ? рддреБрдо рдХреНрдпрд╛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реЛ?

рдЗрд╕реЗ рдкрд╣рдЪрд╛рдиреЗрдВ

рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрддреЗ рд╣реИрдВ?

рдкрддрд╛ рд▓рдЧрд╛рдПрдБ рдХрд┐ рдХреНрдпрд╛ рдПрдХ рдирдпрд╛ рдЕрдиреБрд░рдХреНрд╖рдХ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ рдпрд╛ рдлреАрдЪрд░ рд╕рдорддрд╛ рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ рдкреНрд▓рдЧрдЗрди?
рд╕рд┐рд░реНрдл рд╡реЗрдирд┐рд▓рд╛ рдкреНрд░реЛрдЯреЛрдмрдл рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ?

рдЖрдк рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ?

рдкрд░реАрдХреНрд╖рдг

рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рдмрдорд┐рдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рд╣рд╛рдВ

dependencies technical debt

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдХреГрдкрдпрд╛ рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВ рддрд╛рдХрд┐ рд╣рдо рдСрдлрд╝рд▓рд╛рдЗрди рдЪрд░реНрдЪрд╛ рдХрд░ рд╕рдХреЗрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рджрд░реНрдж рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕реЗ рдПрдХ рдпрд╛ рджреЛ рд╕рдкреНрддрд╛рд╣ рдореЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдЕрдиреНрдпрдерд╛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдВрдШрд░реНрд╖ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдиреЗ рд╣рд╛рде рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЬрд╛рдирдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдФрд░ рдкреБрд░рд╕реНрдХрд╛рд░ рдкрд░ рдирдЬрд░ рд░рдЦрдирд╛ред

рд╕рднреА 15 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╕рддреНрдпрд╛рдкрди рдкреНрд▓рдЧрдЗрди рд╣рдо GoGo рдХреЗ рд▓рд┐рдП рдЧрд┐рд░рд╛рдП рдЧрдП рд╕рдорд░реНрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
https://github.com/envoyproxy/protoc-gen-validate/pull/340

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдФрд░ рдЧреЛрдЧреЛ/рдкреНрд░реЛрдЯреЛрдмрдл рд╕реЗ рджреВрд░ рдЬрд╛рдирд╛ рд╣реИред рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рд╣рдорд╛рд░реА рдЕрдиреНрдп рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдЧреЛрдЧреЛ рд╕реЗ рджреВрд░ рд╣реЛрддреА рдЬрд╛ рд░рд╣реА рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдХрдард┐рди рд╣реЛрддрд╛ рдЬрд╛рдПрдЧрд╛ред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдХрд╛рдо рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╣рдо рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@rvolosatovs рд╢рд╛рдпрдж рд╣рдорд╛рд░реЗ gogottn рдЬрдирд░реЗрдЯрд░ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдХрд╕реНрдЯрдо рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдореБрдЭреЗ рд╣рдорд╛рд░реА рдкреНрд░реЛрдЯреЛ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛ рд╣реИ:

  • рд╣рдо gogoproto.customname , gogoproto.stdtime рдФрд░ gogoproto.stdduration рдФрд░ goproto_enum_prefix рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╣рдЯрд╛рдХрд░ рд╢реБрд░реБрдЖрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛рдирд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЖрд╕рд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЧреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд┐рд╕реА рднреА рдкрд░рд┐рдгрд╛рдореА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддреБрд░рдВрдд рд╢рд┐рдХрд╛рдпрдд рдХрд░реЗрдЧрд╛ред
  • gogoproto.embed рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЕрдм рд╣рдо рдПрдореНрдмреЗрдбреЗрдб рдлрд╝реАрд▓реНрдб рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ (рдЧреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдвреВрдВрдврдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛), рдФрд░ рдпрд╣ рдХрд┐ рд╕рдВрджреЗрд╢ рдЕрдм рдХреБрдЫ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рдпрд╣ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред
  • gogoproto.nullable рд╡рд┐рдХрд▓реНрдк рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЧреЗрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рд╢реВрдиреНрдп-рдЪреЗрдХ тАЛтАЛрдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдкрд░рд┐рдгрд╛рдореА рд╕рдорд╕реНрдпрд╛рдПрдВ рдЧреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдкрдХрдбрд╝ рдореЗрдВ рдирд╣реАрдВ рдЖ рд╕рдХрддреА рд╣реИрдВред рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдирд┐рдЬреА рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рдлрд┐рд░ рдЧреЗрдЯрд░реНрд╕/рд╕реЗрдЯрд░реНрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдФрд░ рдЕрдВрдд рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд░рдирд╛ред
  • рдЬреЛ рдХреНрд╖реЗрддреНрд░ рдХрд╛рдлреА рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рд╡реЗ рд╣реИрдВ gogoproto.customtype рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░ рдФрд░ gogoproto.enum_stringer рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдирдоред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдЕрдХреНрд╕рд░ рдЬреЗрдПрд╕рдУрдПрди рдореЗрдВ рдорд╛рд░реНрд╢рд▓/рдЕрдирдорд░реНрд╢рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред рдХрд╕реНрдЯрдо bytes рдлрд╝реАрд▓реНрдб рдЬреИрд╕реЗ EUI, DevAddr рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рд╣рдо рдкреНрд░рдХрд╛рд░ (рдкреНрд░реЛрдЯреЛ рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ) рдХреЛ string (рдЬреЛ рдмрд╛рдЗрдирд░реА рд╕рдВрдЧрдд рд╣реИ) рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред Enums рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдпрд╣ JSON API рдХреЛ рддреЛрдбрд╝рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдЙрдиреНрд╣реЗрдВ (UnmarshalJSON рджреНрд╡рд╛рд░рд╛) рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдФрд░ рдЗрдирдЯреНрд╕ рджреЛрдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ v4 рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рднреА рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдордп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдХреБрдЫ рдФрд░ (рдПрдкреАрдЖрдИ рдмреНрд░реЗрдХрд┐рдВрдЧ) рдЖрд╢реНрдЪрд░реНрдп рдЦреЛрдЬ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдкрд╣рд▓реЗ https://github.com/alta/protopatch рдХреЛ рдЖрдЬрд╝рдорд╛рдПрдВред рдкрд░рд┐рдгрд╛рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░:

  • рдЕрдЧрд░ рд╣рдорд╛рд░реА рд╕рднреА рдЬрд╝рд░реВрд░рддреЗрдВ рдкреВрд░реА рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ -> рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рдПрдВ ( api рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдмрд╕ рдЦреЛрдЬ рдФрд░ рдмрджрд▓реЗрдВ)
  • рдпрджрд┐ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реА рдХреБрдЫ рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкреНрд▓рдЧрдЗрди рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдХрд╕реНрдЯрдо рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ -> рд╣рдореЗрдВ рдкреНрд░рддрд┐-рд╡рд┐рдХрд▓реНрдк рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрд╛ рддреЛ рдЗрди рдХрд╕реНрдЯрдо рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рд╢рд╛рдпрдж, protopatch рдпреЛрдЧрджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдпрд╣ рдПрдХ рд╣реИ рдХрдо рдкреНрд░рдпрд╛рд╕ рд╕реБрд╡рд┐рдзрд╛ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдХрд▓реНрдк рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ - рдЕрдЧрд░ рд╣рдо customtype рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдХрд┐ IMO рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпреЛрдЧрджрд╛рди рдХреЛ рд╕рд╣реА рдард╣рд░рд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж stdtime рдЬреИрд╕рд╛ рдХреБрдЫ - рдЗрддрдирд╛ рдирд╣реАрдВред

рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╡реЗрдирд┐рд▓рд╛ рдкреНрд░реЛрдЯреЛрдмрдл рдкреНрд░реЛрдЯреЛрд╕ рдХрд╛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЖрдЬ рдкреНрд░реЛрдЯреЛрдмрдл рдХреЗ рдкреНрд░рджрддреНрдд рдлреАрдЪрд░ рд╕реЗрдЯ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП)ред
рдпрд╣ рдХреЗрд╡рд▓ (рдбреА-) рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЯреЛрдмрдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдФрд░ рдПрдкреАрдЖрдИ рдкрд░рдд рдкрд░ред рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд╛рджреЗ рд╡реЗрдирд┐рд▓рд╛ рд╕реЗ рдЙрддреНрдкрдиреНрди рдЧреЛ рдкреНрд░реЛрдЯреЛрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдореБрдЭреЗ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред
рддреЛ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдирдПрд╕:

  1. рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реЗ *ttnpb.EndDevice (рд╡реЗрдирд┐рд▓рд╛ рдЙрддреНрдкрдиреНрди рдЧреЛ рдкреНрд░рдХрд╛рд░) рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рд╕рдВрдЧреНрд░рд╣реАрдд рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рд╕реЗ deserialized
  2. *ttnpb.EndDevice рдХреЛ T_device рдХрдирд╡рд░реНрдЯ рдХрд░реЗрдВ, (рдиреЛрдЯ: рд╢рд╛рдпрдж рдпрд╣ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдпрд╛ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд░реИрдкрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)
  3. NS . рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ T_device рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
  4. T_device рдХреЛ *ttnpb.EndDevice рдХрдирд╡рд░реНрдЯ рдХрд░реЗрдВ (рдиреЛрдЯ: рдпрджрд┐ рд╣рдо рдПрдХ рд░реИрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдпрд╣ рдПрдХ рдЫреЛрдЯрд╛, рдмрд╣реБрдд рддреЗрдЬрд╝ рдХрд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдмрджрд▓реЗ рдЧрдП рдлрд╝реАрд▓реНрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдмрд╛рдЗрдирд░реА рдкрд░ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдбреЗрдЯрд╛ рд╕реАрдзреЗ)
  5. *ttnpb.EndDevice рд╕реЗрдЯ рдХрд░реЗрдВ, рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВ

рд░реЗрдлрд░реА рднреА https://github.com/TheThingsNetwork/lorawan-stack/issues/342 (рдЬрдирд░реЗрдЯреЗрдб рдкреЙрдкреНрдпреБрд▓реЗрдЯрд░)

рдореИрдВ рдЧреЛрдЧреЛ рдХреЗ (рдЫреЛрдЯреЗ) рд╡рд┐рдХрд▓реНрдк рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдирд╣реАрдВ рд╣реВрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреИрди рдХреЛ рдзрдХреНрдХрд╛ рджреЗ рд░рд╣рд╛ рд╣реИред рдЖрдЗрдП рдЪреАрдЬреЛрдВ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╡реИрдирд┐рд▓рд╛ рд░рдЦреЗрдВ, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рдХрд┐ рдЖрдЧреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИред

рдореИрдВ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╣рдо рд╣рд░ рдЬрдЧрд╣ рдЙрддреНрдкрдиреНрди рдкреНрд░реЛрдЯреЛрдЬ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреБрдЫ рдЬрдЧрд╣реЛрдВ рдкрд░ рдордзреНрдпрд╕реНрде рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ (рдбреАрдЯреАрдУ: рдкреНрд░реЛрдЯреЛрд╕, рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд▓рд┐рдП рднреА) рдХреЛ рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ (рдбреАрдПрдУ: рд╣рдо рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ) рд╕реЗ рдЕрд▓рдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рд╡рд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдкрдврд╝ рд░рд╣рд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрдВрдЯрд░рдлреЗрд╕ рднреА рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЗрд╕рд╕реЗ рдХрд┐рддрдиреА рджреВрд░ рд╣реИрдВред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдореИрдВ T_device рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реЗ рдПрдирдПрд╕ рдХреЛ рдмрджрд▓рдиреЗ рддрдХ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛, рдмрд▓реНрдХрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ structs рдФрд░/рдпрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ред

рдЖрдЗрдП рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЛ рдирд╡рдВрдмрд░ рддрдХ рд▓реЗ рдЪрд▓рддреЗ рд╣реИрдВ

@rvolosatovs рдПрдХ рдХрд╕реНрдЯрдо JSON

рдЕрдЧрд░ рд╣рдо рд╕реАрдзреЗ рд╡реИрдирд┐рд▓рд╛ рдкреНрд░реЛрдЯреЛрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рднрд╛рд░реА рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдмреЛрдЭ рдФрд░ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХрд╛ рднрд╛рд░ред
рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдкрд░ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рдХрд░рддрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЧреИрд░-рдШреБрд╕рдкреИрда рд╡рд┐рдХрд▓реНрдк рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрджрд┐ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕ рдкреВрд░реА рдЪреАрдЬ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдкреНрд▓рдЧрдЗрди рдЬрд┐рд╕ рдкрд░ рд╣рдо рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдПрдХ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдореИрдВ рдЪреАрдЬреЛрдВ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╡реИрдирд┐рд▓рд╛ рдХреЗ рдХрд░реАрдм рд░рдЦрдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред рдЕрдЧрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ nil рд╣рдо рдЬрд┐рддрдирд╛ рдЪрд╛рд╣реЗрдВ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рд╣реА рд╣реЛред рдпрд╣ рд╣рдорд╛рд░реЗ рдкрдХреНрд╖ рдореЗрдВ рднреА рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрдЬрд╛рдп рдЪреАрдЬреЗрдВ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИрдВред

рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкреВрд░реЗ рдХреЛрдбрдмреЗрд╕ рдХреЛ рд░рд┐рдлреИрдХреНрдЯрд░ рдХрд░рдирд╛ рдПрдХ рджрд░реНрдж рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдЪрд╛рд╣реЗ рд╣рдо рдЗрд╕реЗ рдХреИрд╕реЗ рднреА рдХрд░реЗрдВред рд╣рдорд╛рд░реЗ (рдЧреЛрдЧреЛ-рдЬреЗрдирд░реЗрдЯреЗрдб) рдкреНрд░реЛрдЯреЛ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрднреА рд╣рд░ рдЬрдЧрд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреАрдЖрд░рдкреАрд╕реА рдПрдкреАрдЖрдИ, рдПрдЪрдЯреАрдЯреАрдкреА рдПрдкреАрдЖрдИ, рдШрдЯрдирд╛рдУрдВ, рддреНрд░реБрдЯрд┐рдпреЛрдВ, рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ, рд░реЗрдбрд┐рд╕ рдбреАрдмреА, ...), рд╣рдорд╛рд░реЗ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдХрд╛рдлреА рдХреБрдЫ рд╕рдм рдХреБрдЫ, рдФрд░ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдпрд╣ рдЕрднреА рджрд┐рдЦрддрд╛ рд╣реИ, рд╕рдм рдПрдХ рд╣реА рд╕рдордп рдореЗрдВред

рдХрдард┐рди рдЖрд╡рд╢реНрдпрдХрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ v3 API рдХреА рд╕рдВрдЧрддрддрд╛ рдХреЛ рднрдВрдЧ рди рдХрд░реЗрдВред рднрд▓реЗ рд╣реА рд╣рдо рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ v4 API (рдХрдо рд╕реЗ рдХрдо рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ) рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдХреНрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рдлрд┐рд░ рднреА рд╣рдореЗрдВ рдореМрдЬреВрджрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрд╕ v3 API рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд░рд╣рдирд╛ рд╣реЛрдЧрд╛ред

рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдЖрдВрддрд░рд┐рдХ (рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп, рд╕реНрдерд┐рд░-рднреАрддрд░-рдорд╛рдореВрд▓реА) рдПрдкреАрдЖрдИ рдФрд░ рд╣рдорд╛рд░реЗ (рд╕рдВрд╕реНрдХрд░рдг, рд╕реНрдерд┐рд░) рдбреЗрдЯрд╛рдмреЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рд╕реЗ рд╣рдорд╛рд░реЗ (рд╕рдВрд╕реНрдХрд░рдг, рд╕реНрдерд┐рд░-рднреАрддрд░-рдкреНрд░рдореБрдЦ) рдмрд╛рд╣рд░реА рдПрдкреАрдЖрдИ рдХреЛ рдбрд┐рдХреВрдк рдХрд░рдХреЗ рдЦреБрдж рдХреЛ рдПрдХ рдмрдбрд╝рд╛ рдЙрдкрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗред . рдлрд┐рд░ рд╣рдо рдЕрдкрдиреЗ рдЖрдВрддрд░рд┐рдХ рдПрдкреАрдЖрдИ рдФрд░ рдЕрдиреНрдп рдХреЗ рдмреАрдЪ рдХрдирд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдРрд╕реЗ рдХрджрдо рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдЕрднреА рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ:

JSON

рд╣рдорд╛рд░реЗ v3 JSON API рдХреЛ рд╕рдВрдЧрдд рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдкрд╣рд▓рд╛ TODO JSON рдорд╛рд░реНрд╢рд▓рд░ рдФрд░ рдЕрдирдорд░реНрд╢рд▓рд░ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ рдЬреЛ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдХреИрд╕реЗ рдорд╛рд░реНрд╢рд▓ / рдЕрдирдорд░реНрд╢рд▓ рдХрд░рдирд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдирд╛ рд╡реИрд╕реЗ рднреА рд╕реНрдорд╛рд░реНрдЯ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрдлрд╝рд░реНрд╕ рдХреЗ рд▓рд┐рдП JSON рдкреНрд░рд╛рд░реВрдк рдХреЗ рдЧреЛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реНрдерд┐рд░рддрд╛ рдХрд╛ рд╡рд╛рджрд╛ рдирд╣реАрдВ рд╣реИ , рдЗрд╕рд▓рд┐рдП рд╣рдо рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдЙрд╕ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд░рдЦрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рд╣рдо JSON рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрд╢рд▓ рдХрд░рддреЗ рд╕рдордп рдлреАрд▓реНрдб рдорд╛рд╕реНрдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред grpc-gateway рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рд╣рдо рдХреЛрдбреЗрдХ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдХреЛрдбреЗрдХ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ {gogo,golang}/protobuf рдХреЗ jsonpb рдХреЗ рдмрдЬрд╛рдп рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ (рдЬреЗрдирд░реЗрдЯ) (рдЕрди) рдорд╛рд░реНрд╢рд▓рд░реНрд╕ рдХреЛ рдмреБрд▓рд╛рддрд╛ рд╣реИред

рдирдП рдкреНрд░реЛрдЯреЛрд╕ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ _рдЕрдЧрд▓реЗ рд╕реЗ_ рдкреБрд░рд╛рдиреЗ рд╡рд╛рд▓реЗ

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдпрд╣рд╛рдВ рдХреЛрд╢рд┐рд╢ рдХреА рдереА: https://github.com/TheThingsNetwork/lorawan-stack/commit/a41f62d98ae7ee719b576e6fcd2009a79cd38f4c

рдпрд╣ рдкреНрд░реЛрдЯреЛрдмрдл рдХреЛ рдкреНрд░рдХрд╛рд░ рдХреА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкреБрд░рд╛рдиреЗ рдкреНрд░реЛрдЯреЛрдЬ рд╕реЗ golang_proto.RegisterType рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ google.protobuf.Any рдХрд╛ рд╕рдорд╛рдзрд╛рди рдмрд╛рдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдВрднрд╡рддрдГ рдЙрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдвреВрдВрдв рд╕рдХрддреЗ рд╣реИрдВред

рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП рдкреНрд░реЛрдЯреЛрдЬ рдХреЗ рдмреАрдЪ рдХрдирд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдЬреЗрдирд░реЗрдЯ рдХрд░реЗрдВ

рдпрд╣ рдХреЗрд╡рд▓ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рд╣реИ, рд▓реЗрдХрд┐рди рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рдорд╛рди рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдЬреЗрдирд░реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред

рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде: https://github.com/TheThingsNetwork/lorawan-stack/commit/cd7d75c8b42ad15eee1ac594ff6d0f2d5a75eb67 , рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрди рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЬреАрдЖрд░рдкреАрд╕реА рд╕реЗрд╡рд╛ рдХреЛ рд╣реА рдмрджрд▓рддрд╛ рд╣реИред рдЬреАрдЖрд░рдкреАрд╕реА-рдЧреЗрдЯрд╡реЗ рдЕрднреА рднреА рдЬреЗрдПрд╕рдУрдПрди рдкрдХреНрд╖ рдкрд░ рдкреБрд░рд╛рдиреА рдЧреЛрдЧреЛ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЖрдВрддрд░рд┐рдХ рдЬреАрдЖрд░рдкреАрд╕реА рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рддрдм рдирдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЪрд▓рд╛рддрд╛ рд╣реИред

рдХреБрдЫ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рдЕрдкрдбреЗрдЯ рдФрд░ рдкрд╢реНрдЪ рд╕рдВрдЧрддрддрд╛ рдХрд╛рд░реНрдп-рдЖрд╕рдкрд╛рд╕ рдпрд╣рд╛рдВ рдкреБрд╢ рдХрд┐рдП: https://github.com/TheThingsNetwork/lorawan-stack/compare/issue/2798-codec

рд╣рдорд╛рд░реА рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдкреНрд░реЛрдЯреЛрдмрдлрд╝ 1.4 рдФрд░ V2 API рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рд╣реЛ рд░рд╣реА рд╣реИрдВ, рдФрд░ рдЬрд┐рддрдиреА рджреЗрд░ рд╣рдо рдЗрд╕реЗ рдЦреБрд▓рд╛ рд░рдЦреЗрдВрдЧреЗ, рд╣рдорд╛рд░реА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рд╣рдореЗрдВ рдЙрддрдиреА рд╣реА рдЕрдзрд┐рдХ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрдВрдЧреАред

рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдХреБрдЫ рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрд╣ рдирд┐рд░реНрдгрдп рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рдЗрд╕ рд╕рдм рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред

рдХреГрдкрдпрд╛ рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВ рддрд╛рдХрд┐ рд╣рдо рдСрдлрд╝рд▓рд╛рдЗрди рдЪрд░реНрдЪрд╛ рдХрд░ рд╕рдХреЗрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рджрд░реНрдж рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕реЗ рдПрдХ рдпрд╛ рджреЛ рд╕рдкреНрддрд╛рд╣ рдореЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдЕрдиреНрдпрдерд╛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдВрдШрд░реНрд╖ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдиреЗ рд╣рд╛рде рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЬрд╛рдирдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдФрд░ рдкреБрд░рд╕реНрдХрд╛рд░ рдкрд░ рдирдЬрд░ рд░рдЦрдирд╛ред

рдЕрдЧрд▓реЗ рдХрджрдо:

  1. @rvolosatovs рдЯреВрд▓рд┐рдВрдЧ рдХреЛ "рд╡реЗрдирд┐рд▓рд╛" рдХреЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ

    • unconvert , gofumpt рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдЬреЛ рдХреБрдЫ рднреА рд╣рдо рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕реЗ рд╣рдЯрд╛ рджреЗрдВ

    • protoc-gen-gogottn рд╕реЗ protoc-gen-gofast рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ (рдпрд╛ рдЬреЛ рднреА рд╡реИрдирд┐рд▓рд╛ рдХреЗ рд╕рдмрд╕реЗ рдХрд░реАрдм рд╣реЛ)

    • рд╣рдорд╛рд░реА рдкреНрд░реЛрдЯреЛ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ (gogoproto.*) рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝реЗрдВ, рддрд╛рдХрд┐ рд╡реЗ рдЕрднреА рдХреЗ рд╕рдорд╛рди рд╣реА рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВ

  2. рд╣рдореЗрдВ рд╕реАрдзреЗ рдлреАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдХреЗ рдмрдЬрд╛рдп рдЧреЗрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рд░рд┐рдлрд▓реЗрдХреНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╢рд╛рдпрдж gopls рдФрд░ rf рдЬреИрд╕реЗ рдЯреВрд▓ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  3. рд╣рдо рдПрдХ-рдПрдХ рдХрд░рдХреЗ (gogoproto.*) рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╢рд╛рдпрдж gopls рдФрд░ rf рдЬреИрд╕реЗ рдЯреВрд▓ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

    • gogoproto.populate рдирд┐рдХрд╛рд▓рдирд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ (https://github.com/TheThingsNetwork/lorawan-stack/issues/342)

    • gogoproto.customname рд╣рдЯрд╛рдирд╛ рдФрд░ EUI -> Eui рдЖрджрд┐ рдХреЛ рдмрджрд▓рдирд╛ред

    • gogoproto.embed рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ. рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢ рдЕрднреА рднреА ValidateContext(context.Context) error рдФрд░ ExtractRequestFields(m map[string]interface{}) рдЬреИрд╕реЗ рдЗрдВрдЯрд░рдлреЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред

    • gogoproto.nullable рд╣рдЯрд╛рдирд╛ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдХрд┐ рд╣рдо рдЬрд╣рд╛рдВ рд╕рдВрднрд╡ рд╣реЛ рдЧреЗрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдФрд░ рдЕрдиреНрдпрдерд╛ рд╢реВрдиреНрдп рдЬрд╛рдВрдЪ рдХрд░реЗрдВред

    • ...

@rvolosatovs рдЖрдЗрдП

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

johanstokking picture johanstokking  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kschiffer picture kschiffer  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ecities picture ecities  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ecities picture ecities  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ZeroSum24 picture ZeroSum24  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ