| <!doctype html><html lang=en-US dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-1.3.0 docs-doc-page docs-doc-id-compiler/generated_code" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.1"><title data-rh=true>Generated Code | Apache Fory™</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true property=og:url content=https://fory.apache.org/docs/compiler/generated_code /><meta data-rh=true property=og:locale content=en_US /><meta data-rh=true property=og:locale:alternate content=zh_CN /><meta data-rh=true name=docusaurus_locale content=en-US /><meta data-rh=true name=docsearch:language content=en-US /><meta data-rh=true http-equiv=Content-Security-Policy content="frame-src 'self' https://ghbtns.com/;"/><meta data-rh=true property=og:image content=https://fory.apache.org/img/logo.png /><meta data-rh=true property=og:image:width content=1500 /><meta data-rh=true property=og:image:height content=1500 /><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true name=twitter:image content=https://fory.apache.org/img/logo.png /><meta data-rh=true name=docusaurus_version content=1.3.0 /><meta data-rh=true name=docusaurus_tag content=docs-default-1.3.0 /><meta data-rh=true name=docsearch:version content=1.3.0 /><meta data-rh=true name=docsearch:docusaurus_tag content=docs-default-1.3.0 /><meta data-rh=true property=og:title content="Generated Code | Apache Fory™"/><meta data-rh=true name=description content="This document explains generated code for each target language."/><meta data-rh=true property=og:description content="This document explains generated code for each target language."/><link data-rh=true rel=icon href=/img/favicon.ico /><link data-rh=true rel=canonical href=https://fory.apache.org/docs/compiler/generated_code /><link data-rh=true rel=alternate href=https://fory.apache.org/docs/compiler/generated_code hreflang=en-US /><link data-rh=true rel=alternate href=https://fory.apache.org/zh-CN/docs/compiler/generated_code hreflang=zh-CN /><link data-rh=true rel=alternate href=https://fory.apache.org/docs/compiler/generated_code hreflang=x-default /><script data-rh=true type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","item":"https://fory.apache.org/docs/compiler/generated_code","name":"Generated Code","position":1}]}</script><link rel=alternate type=application/rss+xml href=/blog/rss.xml title="Apache Fory™ RSS Feed"><link rel=alternate type=application/atom+xml href=/blog/atom.xml title="Apache Fory™ Atom Feed"><script type=text/javascript>"fury.apache.org"===window.location.host&&(window.location.href="https://fory.apache.org"),function(){for(var o=window.location.pathname,a=["guide","introduction","start"],n=0;n<a.length;n++){var t=a[n],i=RegExp("^((?:/[a-z]{2}-[A-Z]{2})?/docs(?:/(?:next|[0-9]+.[0-9]+))?)/docs/"+t+"(/.*)?$"),c=o.match(i);if(c){var r=c[1]+"/"+t+(c[2]||"");window.location.replace(r+window.location.search+window.location.hash);return}}}()</script><link rel=stylesheet href=/assets/css/styles.3a1edaa1.css /><script src=/assets/js/runtime~main.605b11b1.js defer></script><script src=/assets/js/main.283fea4b.js defer></script></head><body><svg style="display: none;"><defs> |
| <symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol> |
| </defs></svg> |
| <script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id=__docusaurus><div role=region aria-label="Skip to main content"><a class=skipToContent_fXgn href=#__docusaurus_skipToContent_fallback>Skip to main content</a></div><nav aria-label=Main class="theme-layout-navbar navbar navbar--fixed-top"><div class=navbar__inner><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded=false class="navbar__toggle clean-btn" type=button><svg width=30 height=30 viewBox="0 0 30 30" aria-hidden=true><path stroke=currentColor stroke-linecap=round stroke-miterlimit=10 stroke-width=2 d="M4 7h22M4 15h22M4 23h22"/></svg></button><a class=navbar__brand href=/><div class=navbar__logo><img src=/img/fory-logo-light.png alt="Apache Fory™ Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"/><img src=/img/fory-logo-dark.png alt="Apache Fory™ Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"/></div><b class="navbar__title text--truncate"></b></a><a aria-current=page class="navbar__item navbar__link navbar__link--active" href=/docs/introduction/overview>Docs</a><a class="navbar__item navbar__link" href=/docs/specification/xlang_serialization_spec>Specification</a><a class="navbar__item navbar__link" href=/docs/community/>Community</a><a class="navbar__item navbar__link" href=/user>Users</a><a class="navbar__item navbar__link" href=/download>Download</a><a class="navbar__item navbar__link" href=/blog>Blog</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href=# aria-haspopup=true aria-expanded=false role=button class=navbar__link>ASF</a><ul class=dropdown__menu><li><a href=https://www.apache.org/ target=_blank rel="noopener noreferrer" class=dropdown__link>Foundation</a><li><a href=https://www.apache.org/licenses/ target=_blank rel="noopener noreferrer" class=dropdown__link>License</a><li><a href=https://www.apache.org/events/current-event.html target=_blank rel="noopener noreferrer" class=dropdown__link>Events</a><li><a href=https://privacy.apache.org/policies/privacy-policy-public.html target=_blank rel="noopener noreferrer" class=dropdown__link>Privacy</a><li><a href=https://www.apache.org/security/ target=_blank rel="noopener noreferrer" class=dropdown__link>Security</a><li><a href=https://www.apache.org/foundation/sponsorship.html target=_blank rel="noopener noreferrer" class=dropdown__link>Sponsorship</a><li><a href=https://www.apache.org/foundation/thanks.html target=_blank rel="noopener noreferrer" class=dropdown__link>Thanks</a><li><a href=https://www.apache.org/foundation/policies/conduct.html target=_blank rel="noopener noreferrer" class=dropdown__link>Code of Conduct</a></ul></div><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class=navbar__link aria-haspopup=true aria-expanded=false role=button href=/docs/compiler/generated_code>1.3.0</a><ul class=dropdown__menu><li><a class=dropdown__link href=/docs/next/compiler/generated_code>dev</a><li><a aria-current=page class="dropdown__link dropdown__link--active" href=/docs/compiler/generated_code>1.3.0</a><li><a class=dropdown__link href=/docs/1.2.0/compiler/generated_code>1.2.0</a><li><a class=dropdown__link href=/docs/1.1.0/compiler/generated_code>1.1.0</a><li><a class=dropdown__link href=/docs/1.0.0/compiler/generated_code>1.0.0</a><li><a class=dropdown__link href=/docs/0.17/compiler/generated_code>0.17</a><li><a class=dropdown__link href=/docs/0.16/compiler/generated_code>0.16</a><li><a class=dropdown__link href=/docs/0.15/compiler/generated_code>0.15</a><li><a class=dropdown__link href=/docs/0.14/introduction/overview>0.14</a><li><a class=dropdown__link href=/docs/0.13/introduction/overview>0.13</a><li><a class=dropdown__link href=/docs/0.12/introduction/overview>0.12</a><li><a class=dropdown__link href=/docs/0.11/introduction/overview>0.11</a><li><a class=dropdown__link href=/docs/0.10/introduction/overview>0.10</a></ul></div><a href=https://github.com/apache/fory target=_blank rel="noopener noreferrer" class="navbar__item navbar__link header-github-link" aria-label="GitHub repository"></a><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href=# aria-haspopup=true aria-expanded=false role=button class=navbar__link><svg viewBox="0 0 24 24" width=20 height=20 aria-hidden=true class=iconLanguage_nlXk><path fill=currentColor d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"/></svg>English</a><ul class=dropdown__menu><li><a href=/docs/compiler/generated_code target=_self rel="noopener noreferrer" class="dropdown__link dropdown__link--active" lang=en-US>English</a><li><a href=/zh-CN/docs/compiler/generated_code target=_self rel="noopener noreferrer" class=dropdown__link lang=zh-CN>简体中文</a></ul></div><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type=button disabled title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width=24 height=24 aria-hidden=true class="toggleIcon_g3eP lightToggleIcon_pyhR"><path fill=currentColor d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"/></svg><svg viewBox="0 0 24 24" width=24 height=24 aria-hidden=true class="toggleIcon_g3eP darkToggleIcon_wfgR"><path fill=currentColor d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"/></svg><svg viewBox="0 0 24 24" width=24 height=24 aria-hidden=true class="toggleIcon_g3eP systemToggleIcon_QzmC"><path fill=currentColor d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"/></svg></button></div><div class=navbarSearchContainer_Bca1><div class=navbar__search><span aria-label="expand searchbar" role=button class=search-icon tabindex=0></span><input id=search_input_react type=search placeholder=Loading... aria-label=Search class="navbar__search-input search-bar" disabled/></div></div></div></div><div role=presentation class=navbar-sidebar__backdrop></div></nav><div id=__docusaurus_skipToContent_fallback class="theme-layout-main main-wrapper mainWrapper_z2l0"><div class=docsWrapper_hBAB><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type=button></button><div class=docRoot_UBD9><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class=sidebarViewport_aRkj><div class=sidebar_njMd><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=true href=/docs/introduction/overview><span title=Introduction class=categoryLinkLabel_W154>Introduction</span></a></div><ul class=menu__list><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/introduction/overview><span title=Overview class=linkLabel_WmDU>Overview</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/introduction/features><span title=Features class=linkLabel_WmDU>Features</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/introduction/benchmark><span title=Benchmark class=linkLabel_WmDU>Benchmark</span></a></ul><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=true href=/docs/start/install><span title=Start class=categoryLinkLabel_W154>Start</span></a></div><ul class=menu__list><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/start/install><span title=Install class=linkLabel_WmDU>Install</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/start/usage><span title=Usage class=linkLabel_WmDU>Usage</span></a></ul><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" role=button aria-expanded=true href=/docs/compiler/><span title="Schema IDL & Compiler" class=categoryLinkLabel_W154>Schema IDL & Compiler</span></a></div><ul class=menu__list><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/compiler/><span title=Overview class=linkLabel_WmDU>Overview</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/compiler/syntax><span title="Schema IDL" class=linkLabel_WmDU>Schema IDL</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/compiler/compiler_guide><span title="Compiler Guide" class=linkLabel_WmDU>Compiler Guide</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current=page tabindex=0 href=/docs/compiler/generated_code><span title="Generated Code" class=linkLabel_WmDU>Generated Code</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/compiler/flatbuffers_idl><span title="FlatBuffers IDL Support" class=linkLabel_WmDU>FlatBuffers IDL Support</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/compiler/protobuf_idl_support><span title="Protobuf IDL Support" class=linkLabel_WmDU>Protobuf IDL Support</span></a></ul><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=true href=/docs/guide/java/><span title=Guide class=categoryLinkLabel_W154>Guide</span></a></div><ul class=menu__list><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex=0 href=/docs/guide/java/><span title=Java class=categoryLinkLabel_W154>Java</span></a><button aria-label="Expand sidebar category 'Java'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex=0 href=/docs/guide/python/><span title=Python class=categoryLinkLabel_W154>Python</span></a><button aria-label="Expand sidebar category 'Python'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex=0 href=/docs/guide/rust/><span title=Rust class=categoryLinkLabel_W154>Rust</span></a><button aria-label="Expand sidebar category 'Rust'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex=0 href=/docs/guide/cpp/><span title=C++ class=categoryLinkLabel_W154>C++</span></a><button aria-label="Expand sidebar category 'C++'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex=0 href=/docs/guide/go/><span title=Go class=categoryLinkLabel_W154>Go</span></a><button aria-label="Expand sidebar category 'Go'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex=0 href=/docs/guide/javascript/><span title=JavaScript class=categoryLinkLabel_W154>JavaScript</span></a><button aria-label="Expand sidebar category 'JavaScript'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex=0 href=/docs/guide/csharp/><span title=C# class=categoryLinkLabel_W154>C#</span></a><button aria-label="Expand sidebar category 'C#'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex=0 href=/docs/guide/swift/><span title=Swift class=categoryLinkLabel_W154>Swift</span></a><button aria-label="Expand sidebar category 'Swift'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex=0 href=/docs/guide/dart/><span title=Dart class=categoryLinkLabel_W154>Dart</span></a><button aria-label="Expand sidebar category 'Dart'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex=0 href=/docs/guide/scala/><span title=Scala class=categoryLinkLabel_W154>Scala</span></a><button aria-label="Expand sidebar category 'Scala'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex=0 href=/docs/guide/kotlin/><span title=Kotlin class=categoryLinkLabel_W154>Kotlin</span></a><button aria-label="Expand sidebar category 'Kotlin'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex=0 href=/docs/guide/xlang/><span title="Cross Language" class=categoryLinkLabel_W154>Cross Language</span></a><button aria-label="Expand sidebar category 'Cross Language'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div></ul></ul></nav></div></div></aside><main class=docMainContainer_TBSr><div class="container padding-top--md padding-bottom--lg"><div class=row><div class="col docItemCol_VOVn"><div class=docItemContainer_Djhp><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label=Breadcrumbs><ul class=breadcrumbs><li class=breadcrumbs__item><a aria-label="Home page" class=breadcrumbs__link href=/><svg viewBox="0 0 24 24" class=breadcrumbHomeIcon_YNFT><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill=currentColor /></svg></a><li class=breadcrumbs__item><span class=breadcrumbs__link>Schema IDL & Compiler</span><li class="breadcrumbs__item breadcrumbs__item--active"><span class=breadcrumbs__link>Generated Code</span></ul></nav><span class="theme-doc-version-badge badge badge--secondary">Version: 1.3.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type=button class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Generated Code</h1></header><p>This document explains generated code for each target language.</p> |
| <p>Fory IDL generated types are idiomatic in host languages and can be used directly as domain objects. Generated types also include <code>to/from bytes</code> helpers and schema modules or registration helpers, depending on the target language.</p> |
| <p>Generated schema modules are named from the schema source file, not from the |
| package or namespace. In targets that expose the module directly in a language |
| package or namespace, names such as <code>AddressbookForyModule</code> or |
| <code>ComplexPbForyModule</code> let multiple IDL files target the same package or |
| namespace without producing colliding <code>ForyModule</code> types.</p> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=reference-schemas>Reference Schemas<a href=#reference-schemas class=hash-link aria-label="Direct link to Reference Schemas" title="Direct link to Reference Schemas" translate=no></a></h2> |
| <p>The examples below use two real schemas:</p> |
| <ol> |
| <li class=""><code>addressbook.fdl</code> (explicit type IDs)</li> |
| <li class=""><code>auto_id.fdl</code> (no explicit type IDs)</li> |
| </ol> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=addressbookfdl-excerpt><code>addressbook.fdl</code> (excerpt)<a href=#addressbookfdl-excerpt class=hash-link aria-label="Direct link to addressbookfdl-excerpt" title="Direct link to addressbookfdl-excerpt" translate=no></a></h3> |
| <div class="language-protobuf codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-protobuf codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>package</span><span class="token plain"> addressbook</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>option</span><span class="token plain"> go_package </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"github.com/myorg/myrepo/gen/addressbook;addressbook"</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>message</span><span class="token plain"> Person </span><span class="token punctuation" style=color:#393A34>[</span><span class="token annotation">id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>100</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token builtin">string</span><span class="token plain"> name </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token builtin">int32</span><span class="token plain"> id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>enum</span><span class="token plain"> PhoneType </span><span class="token punctuation" style=color:#393A34>[</span><span class="token annotation">id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>101</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> PHONE_TYPE_MOBILE </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>0</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> PHONE_TYPE_HOME </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> PHONE_TYPE_WORK </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>message</span><span class="token plain"> PhoneNumber </span><span class="token punctuation" style=color:#393A34>[</span><span class="token annotation">id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>102</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token builtin">string</span><span class="token plain"> number </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token positional-class-name class-name">PhoneType</span><span class="token plain"> phone_type </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> list</span><span class="token operator" style=color:#393A34><</span><span class="token plain">PhoneNumber</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> phones </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>7</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token positional-class-name class-name">Animal</span><span class="token plain"> pet </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>8</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>message</span><span class="token plain"> Dog </span><span class="token punctuation" style=color:#393A34>[</span><span class="token annotation">id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>104</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token builtin">string</span><span class="token plain"> name </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token builtin">int32</span><span class="token plain"> bark_volume </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>message</span><span class="token plain"> Cat </span><span class="token punctuation" style=color:#393A34>[</span><span class="token annotation">id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>105</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token builtin">string</span><span class="token plain"> name </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token builtin">int32</span><span class="token plain"> lives </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">union Animal </span><span class="token punctuation" style=color:#393A34>[</span><span class="token annotation">id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>106</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token positional-class-name class-name">Dog</span><span class="token plain"> dog </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token positional-class-name class-name">Cat</span><span class="token plain"> cat </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>message</span><span class="token plain"> AddressBook </span><span class="token punctuation" style=color:#393A34>[</span><span class="token annotation">id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>103</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> list</span><span class="token operator" style=color:#393A34><</span><span class="token plain">Person</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> people </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token map class-name">map</span><span class="token map class-name punctuation" style=color:#393A34><</span><span class="token map class-name builtin">string</span><span class="token map class-name punctuation" style=color:#393A34>,</span><span class="token map class-name"> Person</span><span class="token map class-name punctuation" style=color:#393A34>></span><span class="token plain"> people_by_name </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=auto_idfdl-excerpt><code>auto_id.fdl</code> (excerpt)<a href=#auto_idfdl-excerpt class=hash-link aria-label="Direct link to auto_idfdl-excerpt" title="Direct link to auto_idfdl-excerpt" translate=no></a></h3> |
| <div class="language-protobuf codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-protobuf codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>package</span><span class="token plain"> auto_id</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>enum</span><span class="token plain"> </span><span class="token class-name">Status</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> UNKNOWN </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>0</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> OK </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>message</span><span class="token plain"> </span><span class="token class-name">Envelope</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token builtin">string</span><span class="token plain"> id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>message</span><span class="token plain"> </span><span class="token class-name">Payload</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token builtin">int32</span><span class="token plain"> value </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> union Detail </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token positional-class-name class-name">Payload</span><span class="token plain"> payload </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token builtin">string</span><span class="token plain"> note </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token positional-class-name class-name">Payload</span><span class="token plain"> payload </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token positional-class-name class-name">Detail</span><span class="token plain"> detail </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>3</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token positional-class-name class-name">Status</span><span class="token plain"> status </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>4</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">union Wrapper </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token positional-class-name class-name">Envelope</span><span class="token plain"> envelope </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token builtin">string</span><span class="token plain"> raw </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=java>Java<a href=#java class=hash-link aria-label="Direct link to Java" title="Direct link to Java" translate=no></a></h2> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=output-layout>Output Layout<a href=#output-layout class=hash-link aria-label="Direct link to Output Layout" title="Direct link to Output Layout" translate=no></a></h3> |
| <p>For <code>package addressbook</code>, Java output is generated under:</p> |
| <ul> |
| <li class=""><code><java_out>/addressbook/</code></li> |
| <li class="">Type files: <code>AddressBook.java</code>, <code>Person.java</code>, <code>Dog.java</code>, <code>Cat.java</code>, <code>Animal.java</code></li> |
| <li class="">Schema module: <code>AddressbookForyModule.java</code></li> |
| </ul> |
| <p>For schemas without a Java package, the schema module name is derived from the |
| source file stem, for example <code>main.fdl</code> generates <code>MainForyModule.java</code>. |
| Java import graphs cannot mix default-package schemas with named Java packages.</p> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=type-generation>Type Generation<a href=#type-generation class=hash-link aria-label="Direct link to Type Generation" title="Direct link to Type Generation" translate=no></a></h3> |
| <p>Messages generate Java classes with <code>@ForyField</code>, default constructors, getters/setters, and byte helpers:</p> |
| <div class="language-java codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-java codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Person</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>enum</span><span class="token plain"> </span><span class="token class-name">PhoneType</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token constant" style=color:#36acaa>MOBILE</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token constant" style=color:#36acaa>HOME</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token constant" style=color:#36acaa>WORK</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">PhoneNumber</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation punctuation" style=color:#393A34>@ForyField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>private</span><span class="token plain"> </span><span class="token class-name">String</span><span class="token plain"> number</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation punctuation" style=color:#393A34>@ForyField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>private</span><span class="token plain"> </span><span class="token class-name">PhoneType</span><span class="token plain"> phoneType</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>byte</span><span class="token punctuation" style=color:#393A34>[</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>toBytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> </span><span class="token class-name">PhoneNumber</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>fromBytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>byte</span><span class="token punctuation" style=color:#393A34>[</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> bytes</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation punctuation" style=color:#393A34>@ForyField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>private</span><span class="token plain"> </span><span class="token class-name">String</span><span class="token plain"> name</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation punctuation" style=color:#393A34>@ForyField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>8</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>private</span><span class="token plain"> </span><span class="token class-name">Animal</span><span class="token plain"> pet</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>byte</span><span class="token punctuation" style=color:#393A34>[</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>toBytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> </span><span class="token class-name">Person</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>fromBytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>byte</span><span class="token punctuation" style=color:#393A34>[</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> bytes</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>Messages with <code>evolving=false</code> are generated with Java fixed-schema struct encoding.</p> |
| <p>Unions generate classes extending <code>org.apache.fory.type.union.Union</code>:</p> |
| <div class="language-java codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-java codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>final</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Animal</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>extends</span><span class="token plain"> </span><span class="token class-name">Union</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>enum</span><span class="token plain"> </span><span class="token class-name">AnimalCase</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token function" style=color:#d73a49>DOG</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token function" style=color:#d73a49>CAT</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>final</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>int</span><span class="token plain"> id</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">AnimalCase</span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>int</span><span class="token plain"> id</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>this</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> id</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> </span><span class="token class-name">Animal</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>ofDog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Dog</span><span class="token plain"> v</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token class-name">AnimalCase</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>getAnimalCase</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>int</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>getAnimalCaseId</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>boolean</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>hasDog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token class-name">Dog</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>getDog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>void</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>setDog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Dog</span><span class="token plain"> v</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=schema-module>Schema Module<a href=#schema-module class=hash-link aria-label="Direct link to Schema Module" title="Direct link to Schema Module" translate=no></a></h3> |
| <p>Each JVM schema generates a <code>ForyModule</code>. Imported schema modules are installed |
| through <code>fory.register(...)</code>, so shared imports are deduplicated by the Fory instance.</p> |
| <div class="language-java codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-java codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>final</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">AddressbookForyModule</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>implements</span><span class="token plain"> </span><span class="token class-name namespace" style=opacity:0.7>org</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name namespace" style=opacity:0.7>apache</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name namespace" style=opacity:0.7>fory</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name">ForyModule</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>final</span><span class="token plain"> </span><span class="token class-name">AddressbookForyModule</span><span class="token plain"> </span><span class="token constant" style=color:#36acaa>INSTANCE</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>new</span><span class="token plain"> </span><span class="token class-name">AddressbookForyModule</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> </span><span class="token class-name">ThreadSafeFory</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>getFory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation punctuation" style=color:#393A34>@Override</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>void</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>install</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Fory</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name namespace" style=opacity:0.7>org</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name namespace" style=opacity:0.7>apache</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name namespace" style=opacity:0.7>fory</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name namespace" style=opacity:0.7>resolver</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name">TypeResolver</span><span class="token plain"> resolver </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>getTypeResolver</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> resolver</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>registerUnion</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Animal</span><span class="token punctuation" style=color:#393A34>.</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>106L</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>new</span><span class="token plain"> </span><span class="token class-name namespace" style=opacity:0.7>org</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name namespace" style=opacity:0.7>apache</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name namespace" style=opacity:0.7>fory</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name namespace" style=opacity:0.7>serializer</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name">UnionSerializer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">resolver</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token class-name">Animal</span><span class="token punctuation" style=color:#393A34>.</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> resolver</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Person</span><span class="token punctuation" style=color:#393A34>.</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>100L</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> resolver</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Person</span><span class="token class-name punctuation" style=color:#393A34>.</span><span class="token class-name">PhoneType</span><span class="token punctuation" style=color:#393A34>.</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>101L</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> resolver</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Person</span><span class="token class-name punctuation" style=color:#393A34>.</span><span class="token class-name">PhoneNumber</span><span class="token punctuation" style=color:#393A34>.</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>102L</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> resolver</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Dog</span><span class="token punctuation" style=color:#393A34>.</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>104L</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> resolver</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Cat</span><span class="token punctuation" style=color:#393A34>.</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>105L</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> resolver</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">AddressBook</span><span class="token punctuation" style=color:#393A34>.</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>103L</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>For schemas without explicit <code>[id=...]</code>, generated registration uses computed numeric IDs (for example from <code>auto_id.fdl</code>):</p> |
| <div class="language-java codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-java codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">resolver</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Status</span><span class="token punctuation" style=color:#393A34>.</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1124725126L</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">resolver</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>registerUnion</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Wrapper</span><span class="token punctuation" style=color:#393A34>.</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1471345060L</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>new</span><span class="token plain"> </span><span class="token class-name namespace" style=opacity:0.7>org</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name namespace" style=opacity:0.7>apache</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name namespace" style=opacity:0.7>fory</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name namespace" style=opacity:0.7>serializer</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name">UnionSerializer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">resolver</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token class-name">Wrapper</span><span class="token punctuation" style=color:#393A34>.</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">resolver</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Envelope</span><span class="token punctuation" style=color:#393A34>.</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>3022445236L</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">resolver</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>registerUnion</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Envelope</span><span class="token class-name punctuation" style=color:#393A34>.</span><span class="token class-name">Detail</span><span class="token punctuation" style=color:#393A34>.</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1609214087L</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>new</span><span class="token plain"> </span><span class="token class-name namespace" style=opacity:0.7>org</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name namespace" style=opacity:0.7>apache</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name namespace" style=opacity:0.7>fory</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name namespace" style=opacity:0.7>serializer</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name">UnionSerializer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">resolver</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token class-name">Envelope</span><span class="token class-name punctuation" style=color:#393A34>.</span><span class="token class-name">Detail</span><span class="token punctuation" style=color:#393A34>.</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">resolver</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Envelope</span><span class="token class-name punctuation" style=color:#393A34>.</span><span class="token class-name">Payload</span><span class="token punctuation" style=color:#393A34>.</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2862577837L</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><br/></div></code></pre></div></div> |
| <p>If <code>option enable_auto_type_id = false;</code> is set, registration uses symbolic names:</p> |
| <div class="language-java codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-java codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">resolver</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Config</span><span class="token punctuation" style=color:#393A34>.</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"myapp.models"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"Config"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">resolver</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>registerUnion</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">Holder</span><span class="token punctuation" style=color:#393A34>.</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token string" style=color:#e3116c>"myapp.models"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token string" style=color:#e3116c>"Holder"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>new</span><span class="token plain"> </span><span class="token class-name namespace" style=opacity:0.7>org</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name namespace" style=opacity:0.7>apache</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name namespace" style=opacity:0.7>fory</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name namespace" style=opacity:0.7>serializer</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name">UnionSerializer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">resolver</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token class-name">Holder</span><span class="token punctuation" style=color:#393A34>.</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=usage>Usage<a href=#usage class=hash-link aria-label="Direct link to Usage" title="Direct link to Usage" translate=no></a></h3> |
| <div class="language-java codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-java codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token class-name">Person</span><span class="token plain"> person </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>new</span><span class="token plain"> </span><span class="token class-name">Person</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">person</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>setName</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string" style=color:#e3116c>"Alice"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">person</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>setPet</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Animal</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>ofDog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>new</span><span class="token plain"> </span><span class="token class-name">Dog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>byte</span><span class="token punctuation" style=color:#393A34>[</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> person</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>toBytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token class-name">Person</span><span class="token plain"> restored </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token class-name">Person</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>fromBytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=grpc-service-companions>gRPC Service Companions<a href=#grpc-service-companions class=hash-link aria-label="Direct link to gRPC Service Companions" title="Direct link to gRPC Service Companions" translate=no></a></h3> |
| <p>When a schema contains services and the compiler is run with <code>--grpc</code>, Java |
| generation emits one <code><ServiceName>Grpc.java</code> file per service next to the model |
| types.</p> |
| <div class="language-java codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-java codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>final</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">AddressBookServiceGrpc</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>final</span><span class="token plain"> </span><span class="token class-name">String</span><span class="token plain"> </span><span class="token constant" style=color:#36acaa>SERVICE_NAME</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"addressbook.AddressBookService"</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> </span><span class="token class-name">AddressBookServiceStub</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>newStub</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name namespace" style=opacity:0.7>io</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name namespace" style=opacity:0.7>grpc</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name">Channel</span><span class="token plain"> channel</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> </span><span class="token class-name">AddressBookServiceBlockingStub</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>newBlockingStub</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name namespace" style=opacity:0.7>io</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name namespace" style=opacity:0.7>grpc</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name">Channel</span><span class="token plain"> channel</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> </span><span class="token class-name">AddressBookServiceFutureStub</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>newFutureStub</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name namespace" style=opacity:0.7>io</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name namespace" style=opacity:0.7>grpc</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name">Channel</span><span class="token plain"> channel</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>abstract</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">AddressBookServiceImplBase</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>implements</span><span class="token plain"> </span><span class="token class-name namespace" style=opacity:0.7>io</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name namespace" style=opacity:0.7>grpc</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name">BindableService</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>void</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>lookup</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Person</span><span class="token plain"> request</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token class-name namespace" style=opacity:0.7>io</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name namespace" style=opacity:0.7>grpc</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name namespace" style=opacity:0.7>stub</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name">StreamObserver</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">AddressBook</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token plain"> responseObserver</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>The generated marshaller serializes each request or response with the schema |
| module's <code>ThreadSafeFory</code>. It uses grpc-java's <code>MethodDescriptor.Marshaller</code> |
| API, so applications compiling these files must provide grpc-java dependencies. |
| Those dependencies are not added to Fory Java artifacts.</p> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=python>Python<a href=#python class=hash-link aria-label="Direct link to Python" title="Direct link to Python" translate=no></a></h2> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=output-layout-1>Output Layout<a href=#output-layout-1 class=hash-link aria-label="Direct link to Output Layout" title="Direct link to Output Layout" translate=no></a></h3> |
| <p>Python output is one module per schema file, for example:</p> |
| <ul> |
| <li class=""><code><python_out>/addressbook.py</code></li> |
| </ul> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=type-generation-1>Type Generation<a href=#type-generation-1 class=hash-link aria-label="Direct link to Type Generation" title="Direct link to Type Generation" translate=no></a></h3> |
| <p>Unions generate a case enum plus a <code>Union</code> subclass with typed helpers:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">AnimalCase</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Enum</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> DOG </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> CAT </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Animal</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Union</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token decorator annotation punctuation" style=color:#393A34>@classmethod</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>dog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">cls</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> v</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> Dog</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>-</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"Animal"</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>case</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">self</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>-</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> AnimalCase</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>case_id</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">self</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>-</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token builtin">int</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>is_dog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">self</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>-</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token builtin">bool</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>dog_value</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">self</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>-</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> Dog</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>set_dog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">self</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> v</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> Dog</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>-</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>None</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><br/></div></code></pre></div></div> |
| <p>Messages generate <code>@pyfory.dataclass</code> types, and nested types stay nested:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token decorator annotation punctuation" style=color:#393A34>@pyfory</span><span class="token decorator annotation punctuation" style=color:#393A34>.</span><span class="token decorator annotation punctuation" style=color:#393A34>dataclass</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Person</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">PhoneType</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">IntEnum</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> MOBILE </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>0</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> HOME </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> WORK </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token decorator annotation punctuation" style=color:#393A34>@pyfory</span><span class="token decorator annotation punctuation" style=color:#393A34>.</span><span class="token decorator annotation punctuation" style=color:#393A34>dataclass</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">PhoneNumber</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> number</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">str</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">field</span><span class="token punctuation" style=color:#393A34>(</span><span class="token builtin">id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> default</span><span class="token operator" style=color:#393A34>=</span><span class="token string" style=color:#e3116c>""</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> phone_type</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> Person</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">PhoneType </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">field</span><span class="token punctuation" style=color:#393A34>(</span><span class="token builtin">id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> default</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>None</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> name</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">str</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">field</span><span class="token punctuation" style=color:#393A34>(</span><span class="token builtin">id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> default</span><span class="token operator" style=color:#393A34>=</span><span class="token string" style=color:#e3116c>""</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> phones</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> List</span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">Person</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">PhoneNumber</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">field</span><span class="token punctuation" style=color:#393A34>(</span><span class="token builtin">id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>7</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> default_factory</span><span class="token operator" style=color:#393A34>=</span><span class="token builtin">list</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> pet</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> Animal </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">field</span><span class="token punctuation" style=color:#393A34>(</span><span class="token builtin">id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>8</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> default</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>None</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>to_bytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">self</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>-</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token builtin">bytes</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token decorator annotation punctuation" style=color:#393A34>@classmethod</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>from_bytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">cls</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> data</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">bytes</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>-</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"Person"</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=registration>Registration<a href=#registration class=hash-link aria-label="Direct link to Registration" title="Direct link to Registration" translate=no></a></h3> |
| <p>Generated registration function:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>register_addressbook_types</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register_union</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Animal</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>106</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> serializer</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">AnimalSerializer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register_type</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Person</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>100</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register_type</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Person</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">PhoneType</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>101</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register_type</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Person</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">PhoneNumber</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>102</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register_type</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Dog</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>104</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register_type</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Cat</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>105</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register_type</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">AddressBook</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>103</span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <p>For schemas without explicit <code>[id=...]</code>, generated registration uses computed numeric IDs:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register_type</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Status</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>1124725126</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register_union</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Wrapper</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>1471345060</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> serializer</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">WrapperSerializer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register_type</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Envelope</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>3022445236</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register_union</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Envelope</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Detail</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>1609214087</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> serializer</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">Envelope</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">DetailSerializer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register_type</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Envelope</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Payload</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>2862577837</span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <p>If <code>option enable_auto_type_id = false;</code> is set:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register_type</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Config</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> name</span><span class="token operator" style=color:#393A34>=</span><span class="token string" style=color:#e3116c>"myapp.models.Config"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register_union</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> Holder</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> name</span><span class="token operator" style=color:#393A34>=</span><span class="token string" style=color:#e3116c>"myapp.models.Holder"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> serializer</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">HolderSerializer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=usage-1>Usage<a href=#usage-1 class=hash-link aria-label="Direct link to Usage" title="Direct link to Usage" translate=no></a></h3> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">person </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> Person</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">name</span><span class="token operator" style=color:#393A34>=</span><span class="token string" style=color:#e3116c>"Alice"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> pet</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">Animal</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Dog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">name</span><span class="token operator" style=color:#393A34>=</span><span class="token string" style=color:#e3116c>"Rex"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> bark_volume</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>10</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> person</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">to_bytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">restored </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> Person</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">from_bytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=grpc-service-companions-1>gRPC Service Companions<a href=#grpc-service-companions-1 class=hash-link aria-label="Direct link to gRPC Service Companions" title="Direct link to gRPC Service Companions" translate=no></a></h3> |
| <p>When a schema contains services and the compiler is run with <code>--grpc</code>, Python |
| generation emits a companion module named <code><module>_grpc.py</code>. The module name is |
| derived from the Fory package by replacing dots with underscores, or <code>generated</code> |
| when the schema has no package. Python gRPC output defaults to <code>grpc.aio</code> |
| AsyncIO APIs.</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> grpc</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> grpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">aio</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">AddressBookServiceStub</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>__init__</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">self</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> channel</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> self</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">lookup </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> channel</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">unary_unary</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token string" style=color:#e3116c>"/addressbook.AddressBookService/Lookup"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> request_serializer</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">_serialize</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> response_deserializer</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">_deserialize</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">AddressBookServiceServicer</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>async</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>lookup</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">self</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> request</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> context</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>await</span><span class="token plain"> context</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">abort</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">grpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">StatusCode</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">UNIMPLEMENTED</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"Method not implemented!"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>add_servicer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">servicer</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> server</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><br/></div></code></pre></div></div> |
| <p>Python gRPC serializers receive and return complete <code>bytes</code> payloads, so the |
| generated callbacks call the model module's <code>_get_fory().serialize(...)</code> and |
| <code>_get_fory().deserialize(...)</code> directly. Applications using the generated |
| companion module must install <code>grpcio</code>; <code>pyfory</code> does not add a hard gRPC |
| dependency. The Python API uses snake_case method names while preserving the |
| original IDL method names in the gRPC wire paths.</p> |
| <p>Generate synchronous Python <code>grpcio</code> companions with |
| <code>--grpc --grpc-python-mode=sync</code>. Sync mode keeps the same generated filename |
| and public names, but servicer methods use regular <code>def</code> methods and sync |
| <code>grpc.Channel</code> and <code>grpc.Server</code> instances.</p> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=rust>Rust<a href=#rust class=hash-link aria-label="Direct link to Rust" title="Direct link to Rust" translate=no></a></h2> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=output-layout-2>Output Layout<a href=#output-layout-2 class=hash-link aria-label="Direct link to Output Layout" title="Direct link to Output Layout" translate=no></a></h3> |
| <p>Rust output is one module file per schema, for example:</p> |
| <ul> |
| <li class=""><code><rust_out>/addressbook.rs</code></li> |
| </ul> |
| <p>When <code>--grpc</code> is used and the schema contains services, Rust also emits:</p> |
| <ul> |
| <li class=""><code><rust_out>/addressbook_service.rs</code></li> |
| <li class=""><code><rust_out>/addressbook_service_grpc.rs</code></li> |
| </ul> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=type-generation-2>Type Generation<a href=#type-generation-2 class=hash-link aria-label="Direct link to Type Generation" title="Direct link to Type Generation" translate=no></a></h3> |
| <p>Unions map to Rust enums with <code>#[fory(id = ...)]</code> schema case attributes. |
| <code>#[fory(unknown)] Unknown(::fory::UnknownCase)</code> marks the Fory-provided |
| forward-compatibility carrier. The marker only selects the carrier and does not |
| add an entry to the schema case table; schema cases still use the full <code>0..N</code> |
| ID range. A generated typed union must have at least one non-<code>Unknown</code> case. The |
| compiler marks the first declared non-<code>Unknown</code> case as <code>#[fory(default)]</code> and |
| emits <code>Default</code> from that case:</p> |
| <div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-rust codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token attribute attr-name" style=color:#00a4db>#[derive(::fory::ForyUnion, Clone, Debug, PartialEq, Eq, Hash)]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>pub</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>enum</span><span class="token plain"> </span><span class="token type-definition class-name">Animal</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token attribute attr-name" style=color:#00a4db>#[fory(unknown)]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">Unknown</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>::</span><span class="token namespace" style=opacity:0.7>fory</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">UnknownCase</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token attribute attr-name" style=color:#00a4db>#[fory(id = 0, default)]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">Dog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>self</span><span class="token punctuation" style=color:#393A34>::</span><span class="token class-name">Dog</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token attribute attr-name" style=color:#00a4db>#[fory(id = 1)]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">Cat</span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>self</span><span class="token punctuation" style=color:#393A34>::</span><span class="token class-name">Cat</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>impl</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>::</span><span class="token namespace" style=opacity:0.7>std</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token namespace" style=opacity:0.7>default</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">Default</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>for</span><span class="token plain"> </span><span class="token class-name">Animal</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>fn</span><span class="token plain"> </span><span class="token function-definition function" style=color:#d73a49>default</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>-></span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>Self</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>Self</span><span class="token punctuation" style=color:#393A34>::</span><span class="token class-name">Dog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token operator" style=color:#393A34><</span><span class="token keyword" style=color:#00009f>self</span><span class="token punctuation" style=color:#393A34>::</span><span class="token class-name">Dog</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>as</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>::</span><span class="token namespace" style=opacity:0.7>fory</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">ForyDefault</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>::</span><span class="token function" style=color:#d73a49>fory_default</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>Nested types generate nested modules:</p> |
| <div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-rust codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>pub</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>mod</span><span class="token plain"> </span><span class="token module-declaration namespace" style=opacity:0.7>person</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token attribute attr-name" style=color:#00a4db>#[derive(ForyEnum, Debug, Clone, PartialEq, Default)]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token attribute attr-name" style=color:#00a4db>#[repr(i32)]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>pub</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>enum</span><span class="token plain"> </span><span class="token type-definition class-name">PhoneType</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token attribute attr-name" style=color:#00a4db>#[default]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">Mobile</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>0</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">Home</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">Work</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token attribute attr-name" style=color:#00a4db>#[derive(ForyStruct, Debug, Clone, PartialEq, Default)]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>pub</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>struct</span><span class="token plain"> </span><span class="token type-definition class-name">PhoneNumber</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token attribute attr-name" style=color:#00a4db>#[fory(id = 1)]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>pub</span><span class="token plain"> number</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token class-name">String</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token attribute attr-name" style=color:#00a4db>#[fory(id = 2)]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>pub</span><span class="token plain"> phone_type</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token class-name">PhoneType</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>Messages derive <code>ForyStruct</code> and include <code>to_bytes</code>/<code>from_bytes</code> helpers:</p> |
| <div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-rust codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token attribute attr-name" style=color:#00a4db>#[derive(ForyStruct, Debug, Clone, PartialEq, Default)]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>pub</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>struct</span><span class="token plain"> </span><span class="token type-definition class-name">Person</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token attribute attr-name" style=color:#00a4db>#[fory(id = 1)]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>pub</span><span class="token plain"> name</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token class-name">String</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token attribute attr-name" style=color:#00a4db>#[fory(id = 7)]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>pub</span><span class="token plain"> phones</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token class-name">Vec</span><span class="token operator" style=color:#393A34><</span><span class="token namespace" style=opacity:0.7>person</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">PhoneNumber</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token attribute attr-name" style=color:#00a4db>#[fory(id = 8)]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>pub</span><span class="token plain"> pet</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token class-name">Animal</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=registration-1>Registration<a href=#registration-1 class=hash-link aria-label="Direct link to Registration" title="Direct link to Registration" translate=no></a></h3> |
| <p>Generated registration function:</p> |
| <div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-rust codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>pub</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>fn</span><span class="token plain"> </span><span class="token function-definition function" style=color:#d73a49>register_types</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>&</span><span class="token keyword" style=color:#00009f>mut</span><span class="token plain"> </span><span class="token class-name">Fory</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>-></span><span class="token plain"> </span><span class="token class-name">Result</span><span class="token operator" style=color:#393A34><</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token namespace" style=opacity:0.7>fory</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">Error</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register_union</span><span class="token punctuation" style=color:#393A34>::</span><span class="token operator" style=color:#393A34><</span><span class="token class-name">Animal</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>106</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>?</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register</span><span class="token punctuation" style=color:#393A34>::</span><span class="token operator" style=color:#393A34><</span><span class="token namespace" style=opacity:0.7>person</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">PhoneType</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>101</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>?</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register</span><span class="token punctuation" style=color:#393A34>::</span><span class="token operator" style=color:#393A34><</span><span class="token namespace" style=opacity:0.7>person</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">PhoneNumber</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>102</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>?</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register</span><span class="token punctuation" style=color:#393A34>::</span><span class="token operator" style=color:#393A34><</span><span class="token class-name">Person</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>100</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>?</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register</span><span class="token punctuation" style=color:#393A34>::</span><span class="token operator" style=color:#393A34><</span><span class="token class-name">Dog</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>104</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>?</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register</span><span class="token punctuation" style=color:#393A34>::</span><span class="token operator" style=color:#393A34><</span><span class="token class-name">Cat</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>105</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>?</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register</span><span class="token punctuation" style=color:#393A34>::</span><span class="token operator" style=color:#393A34><</span><span class="token class-name">AddressBook</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>103</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>?</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">Ok</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>For schemas without explicit <code>[id=...]</code>, generated registration uses computed numeric IDs:</p> |
| <div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-rust codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register</span><span class="token punctuation" style=color:#393A34>::</span><span class="token operator" style=color:#393A34><</span><span class="token class-name">Status</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>1124725126</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>?</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register_union</span><span class="token punctuation" style=color:#393A34>::</span><span class="token operator" style=color:#393A34><</span><span class="token class-name">Wrapper</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>1471345060</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>?</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register</span><span class="token punctuation" style=color:#393A34>::</span><span class="token operator" style=color:#393A34><</span><span class="token class-name">Envelope</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>3022445236</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>?</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register_union</span><span class="token punctuation" style=color:#393A34>::</span><span class="token operator" style=color:#393A34><</span><span class="token namespace" style=opacity:0.7>envelope</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">Detail</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>1609214087</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>?</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register</span><span class="token punctuation" style=color:#393A34>::</span><span class="token operator" style=color:#393A34><</span><span class="token namespace" style=opacity:0.7>envelope</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">Payload</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>2862577837</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>?</span><span class="token punctuation" style=color:#393A34>;</span><br/></div></code></pre></div></div> |
| <p>If <code>option enable_auto_type_id = false;</code> is set:</p> |
| <div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-rust codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register_by_name</span><span class="token punctuation" style=color:#393A34>::</span><span class="token operator" style=color:#393A34><</span><span class="token class-name">Config</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token string" style=color:#e3116c>"myapp.models.Config"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>?</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register_union_by_name</span><span class="token punctuation" style=color:#393A34>::</span><span class="token operator" style=color:#393A34><</span><span class="token class-name">Holder</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token string" style=color:#e3116c>"myapp.models.Holder"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>?</span><span class="token punctuation" style=color:#393A34>;</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=usage-2>Usage<a href=#usage-2 class=hash-link aria-label="Direct link to Usage" title="Direct link to Usage" translate=no></a></h3> |
| <div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-rust codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>let</span><span class="token plain"> person </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token class-name">Person</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> name</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"Alice"</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>into</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> pet</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token class-name">Animal</span><span class="token punctuation" style=color:#393A34>::</span><span class="token class-name">Dog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>self</span><span class="token punctuation" style=color:#393A34>::</span><span class="token class-name">Dog</span><span class="token punctuation" style=color:#393A34>::</span><span class="token function" style=color:#d73a49>default</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>..</span><span class="token class-name">Default</span><span class="token punctuation" style=color:#393A34>::</span><span class="token function" style=color:#d73a49>default</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>let</span><span class="token plain"> bytes </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> person</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>to_bytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>?</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>let</span><span class="token plain"> restored </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token class-name">Person</span><span class="token punctuation" style=color:#393A34>::</span><span class="token function" style=color:#d73a49>from_bytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token operator" style=color:#393A34>&</span><span class="token plain">bytes</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>?</span><span class="token punctuation" style=color:#393A34>;</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=grpc-service-companions-2>gRPC Service Companions<a href=#grpc-service-companions-2 class=hash-link aria-label="Direct link to gRPC Service Companions" title="Direct link to gRPC Service Companions" translate=no></a></h3> |
| <p>When a schema contains services and the compiler is run with <code>--grpc</code>, Rust |
| generation emits a service API module and a tonic binding module. For a schema |
| module named <code>addressbook</code>, those files are <code>addressbook_service.rs</code> and |
| <code>addressbook_service_grpc.rs</code>.</p> |
| <p>The service API module contains the async trait and gRPC path constants:</p> |
| <div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-rust codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token attribute attr-name" style=color:#00a4db>#[::tonic::async_trait]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>pub</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>trait</span><span class="token plain"> </span><span class="token type-definition class-name">AddressBookService</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>::</span><span class="token namespace" style=opacity:0.7>std</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token namespace" style=opacity:0.7>marker</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">Send</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>+</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>::</span><span class="token namespace" style=opacity:0.7>std</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token namespace" style=opacity:0.7>marker</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">Sync</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>+</span><span class="token plain"> </span><span class="token lifetime-annotation symbol" style=color:#36acaa>'static</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>async</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>fn</span><span class="token plain"> </span><span class="token function-definition function" style=color:#d73a49>lookup</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token operator" style=color:#393A34>&</span><span class="token keyword" style=color:#00009f>self</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> request</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>::</span><span class="token namespace" style=opacity:0.7>tonic</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">Request</span><span class="token operator" style=color:#393A34><</span><span class="token keyword" style=color:#00009f>crate</span><span class="token module-declaration namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token module-declaration namespace" style=opacity:0.7>addressbook</span><span class="token module-declaration namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">Person</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>-></span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>::</span><span class="token namespace" style=opacity:0.7>std</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token namespace" style=opacity:0.7>result</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">Result</span><span class="token operator" style=color:#393A34><</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>::</span><span class="token namespace" style=opacity:0.7>tonic</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">Response</span><span class="token operator" style=color:#393A34><</span><span class="token keyword" style=color:#00009f>crate</span><span class="token module-declaration namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token module-declaration namespace" style=opacity:0.7>addressbook</span><span class="token module-declaration namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">AddressBook</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>::</span><span class="token namespace" style=opacity:0.7>tonic</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">Status</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>pub</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> </span><span class="token constant" style=color:#36acaa>ADDRESS_BOOK_SERVICE_SERVICE_NAME</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>&</span><span class="token keyword" style=color:#00009f>str</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"addressbook.AddressBookService"</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>pub</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> </span><span class="token constant" style=color:#36acaa>ADDRESS_BOOK_SERVICE_LOOKUP_PATH</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>&</span><span class="token keyword" style=color:#00009f>str</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"/addressbook.AddressBookService/Lookup"</span><span class="token punctuation" style=color:#393A34>;</span><br/></div></code></pre></div></div> |
| <p>The tonic binding module contains Fory-backed codecs, payload implementations, |
| and client/server wrappers. It serializes each request or response with the |
| generated model type's <code>to_bytes</code> and <code>from_bytes</code> helpers:</p> |
| <div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-rust codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>impl</span><span class="token plain"> </span><span class="token namespace" style=opacity:0.7>codec</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">ForyGrpcPayload</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>for</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>crate</span><span class="token module-declaration namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token module-declaration namespace" style=opacity:0.7>addressbook</span><span class="token module-declaration namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">Person</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>fn</span><span class="token plain"> </span><span class="token function-definition function" style=color:#d73a49>encode_fory_payload</span><span class="token punctuation" style=color:#393A34>(</span><span class="token operator" style=color:#393A34>&</span><span class="token keyword" style=color:#00009f>self</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>-></span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>::</span><span class="token namespace" style=opacity:0.7>std</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token namespace" style=opacity:0.7>result</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">Result</span><span class="token operator" style=color:#393A34><</span><span class="token punctuation" style=color:#393A34>::</span><span class="token namespace" style=opacity:0.7>std</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token namespace" style=opacity:0.7>vec</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">Vec</span><span class="token operator" style=color:#393A34><</span><span class="token keyword" style=color:#00009f>u8</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>::</span><span class="token namespace" style=opacity:0.7>fory</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">Error</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>self</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>to_bytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>fn</span><span class="token plain"> </span><span class="token function-definition function" style=color:#d73a49>decode_fory_payload</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">payload</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>&</span><span class="token punctuation" style=color:#393A34>[</span><span class="token keyword" style=color:#00009f>u8</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>-></span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>::</span><span class="token namespace" style=opacity:0.7>std</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token namespace" style=opacity:0.7>result</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">Result</span><span class="token operator" style=color:#393A34><</span><span class="token keyword" style=color:#00009f>Self</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>::</span><span class="token namespace" style=opacity:0.7>fory</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">Error</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>Self</span><span class="token punctuation" style=color:#393A34>::</span><span class="token function" style=color:#d73a49>from_bytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">payload</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>Applications compiling the generated Rust service files must provide <code>tonic</code> and |
| <code>bytes</code> dependencies; Fory's Rust crate does not add those gRPC dependencies as |
| hard dependencies.</p> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=c>C++<a href=#c class=hash-link aria-label="Direct link to C++" title="Direct link to C++" translate=no></a></h2> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=output-layout-3>Output Layout<a href=#output-layout-3 class=hash-link aria-label="Direct link to Output Layout" title="Direct link to Output Layout" translate=no></a></h3> |
| <p>C++ output is one header per schema file, for example:</p> |
| <ul> |
| <li class=""><code><cpp_out>/addressbook.h</code></li> |
| </ul> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=type-generation-3>Type Generation<a href=#type-generation-3 class=hash-link aria-label="Direct link to Type Generation" title="Direct link to Type Generation" translate=no></a></h3> |
| <p>Messages generate <code>final</code> classes with typed accessors and byte helpers:</p> |
| <div class="language-cpp codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-cpp codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Person</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>final</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">PhoneNumber</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>final</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> std</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">string</span><span class="token operator" style=color:#393A34>&</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>number</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> std</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">string</span><span class="token operator" style=color:#393A34>*</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>mutable_number</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>template</span><span class="token plain"> </span><span class="token operator" style=color:#393A34><</span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Arg</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> Args</span><span class="token operator" style=color:#393A34>></span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>void</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>set_number</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Arg</span><span class="token operator" style=color:#393A34>&&</span><span class="token plain"> arg</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> Args</span><span class="token operator" style=color:#393A34>&&</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> args</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">Result</span><span class="token operator" style=color:#393A34><</span><span class="token plain">std</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">vector</span><span class="token operator" style=color:#393A34><</span><span class="token keyword" style=color:#00009f>uint8_t</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> fory</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">Error</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token function" style=color:#d73a49>to_bytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> fory</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">Result</span><span class="token operator" style=color:#393A34><</span><span class="token plain">PhoneNumber</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> fory</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">Error</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token function" style=color:#d73a49>from_bytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> std</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">vector</span><span class="token operator" style=color:#393A34><</span><span class="token keyword" style=color:#00009f>uint8_t</span><span class="token operator" style=color:#393A34>></span><span class="token operator" style=color:#393A34>&</span><span class="token plain"> data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> std</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">string</span><span class="token operator" style=color:#393A34>&</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>name</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> std</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">string</span><span class="token operator" style=color:#393A34>*</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>mutable_name</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>template</span><span class="token plain"> </span><span class="token operator" style=color:#393A34><</span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Arg</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> Args</span><span class="token operator" style=color:#393A34>></span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>void</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>set_name</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Arg</span><span class="token operator" style=color:#393A34>&&</span><span class="token plain"> arg</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> Args</span><span class="token operator" style=color:#393A34>&&</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> args</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> Animal</span><span class="token operator" style=color:#393A34>&</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>pet</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> Animal</span><span class="token operator" style=color:#393A34>*</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>mutable_pet</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>;</span><br/></div></code></pre></div></div> |
| <p>Optional message fields generate <code>has_xxx</code>, <code>mutable_xxx</code>, and <code>clear_xxx</code> APIs:</p> |
| <div class="language-cpp codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-cpp codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Envelope</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>final</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>bool</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>has_payload</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> payload_ </span><span class="token operator" style=color:#393A34>!=</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>nullptr</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> Envelope</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">Payload</span><span class="token operator" style=color:#393A34>&</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>payload</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>*</span><span class="token plain">payload_</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> Envelope</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">Payload</span><span class="token operator" style=color:#393A34>*</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>mutable_payload</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>if</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token operator" style=color:#393A34>!</span><span class="token plain">payload_</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> payload_ </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> std</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token generic-function function" style=color:#d73a49>make_unique</span><span class="token generic-function generic class-name operator" style=color:#393A34><</span><span class="token generic-function generic class-name">Envelope</span><span class="token generic-function generic class-name double-colon punctuation" style=color:#393A34>::</span><span class="token generic-function generic class-name">Payload</span><span class="token generic-function generic class-name operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> payload_</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>get</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>void</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>clear_payload</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> payload_</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>reset</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>private</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> std</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">unique_ptr</span><span class="token operator" style=color:#393A34><</span><span class="token plain">Envelope</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">Payload</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> payload_</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>;</span><br/></div></code></pre></div></div> |
| <p>Unions generate <code>std::variant</code> wrappers:</p> |
| <div class="language-cpp codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-cpp codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Animal</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>final</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>enum</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">AnimalCase</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token base-clause keyword" style=color:#00009f>uint32_t</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> DOG </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> CAT </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> Animal </span><span class="token function" style=color:#d73a49>dog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Dog v</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> Animal </span><span class="token function" style=color:#d73a49>cat</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Cat v</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> AnimalCase </span><span class="token function" style=color:#d73a49>animal_case</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>noexcept</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>uint32_t</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>animal_case_id</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>noexcept</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>bool</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>is_dog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>noexcept</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> Dog</span><span class="token operator" style=color:#393A34>*</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>as_dog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>noexcept</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> Dog</span><span class="token operator" style=color:#393A34>*</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>as_dog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>noexcept</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> Dog</span><span class="token operator" style=color:#393A34>&</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>dog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> Dog</span><span class="token operator" style=color:#393A34>&</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>dog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>template</span><span class="token plain"> </span><span class="token operator" style=color:#393A34><</span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Visitor</span><span class="token operator" style=color:#393A34>></span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>decltype</span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>auto</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>visit</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Visitor</span><span class="token operator" style=color:#393A34>&&</span><span class="token plain"> vis</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>private</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> std</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">variant</span><span class="token operator" style=color:#393A34><</span><span class="token plain">Dog</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> Cat</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> value_</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>;</span><br/></div></code></pre></div></div> |
| <p>Generated headers include <code>FORY_UNION</code>, <code>FORY_ENUM</code>, and <code>FORY_STRUCT</code> macros |
| for serialization metadata. Field and payload configuration is embedded in the |
| generated <code>FORY_STRUCT</code>/<code>FORY_UNION</code> entries.</p> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=registration-2>Registration<a href=#registration-2 class=hash-link aria-label="Direct link to Registration" title="Direct link to Registration" translate=no></a></h3> |
| <p>Generated registration function:</p> |
| <div class="language-cpp codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-cpp codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>inline</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>void</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>register_types</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">serialization</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">BaseFory</span><span class="token operator" style=color:#393A34>&</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token generic-function function" style=color:#d73a49>register_union</span><span class="token generic-function generic class-name operator" style=color:#393A34><</span><span class="token generic-function generic class-name">Animal</span><span class="token generic-function generic class-name operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>106</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token generic-function function" style=color:#d73a49>register_enum</span><span class="token generic-function generic class-name operator" style=color:#393A34><</span><span class="token generic-function generic class-name">Person</span><span class="token generic-function generic class-name double-colon punctuation" style=color:#393A34>::</span><span class="token generic-function generic class-name">PhoneType</span><span class="token generic-function generic class-name operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>101</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token generic-function function" style=color:#d73a49>register_struct</span><span class="token generic-function generic class-name operator" style=color:#393A34><</span><span class="token generic-function generic class-name">Person</span><span class="token generic-function generic class-name double-colon punctuation" style=color:#393A34>::</span><span class="token generic-function generic class-name">PhoneNumber</span><span class="token generic-function generic class-name operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>102</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token generic-function function" style=color:#d73a49>register_struct</span><span class="token generic-function generic class-name operator" style=color:#393A34><</span><span class="token generic-function generic class-name">Person</span><span class="token generic-function generic class-name operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>100</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token generic-function function" style=color:#d73a49>register_struct</span><span class="token generic-function generic class-name operator" style=color:#393A34><</span><span class="token generic-function generic class-name">Dog</span><span class="token generic-function generic class-name operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>104</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token generic-function function" style=color:#d73a49>register_struct</span><span class="token generic-function generic class-name operator" style=color:#393A34><</span><span class="token generic-function generic class-name">Cat</span><span class="token generic-function generic class-name operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>105</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token generic-function function" style=color:#d73a49>register_struct</span><span class="token generic-function generic class-name operator" style=color:#393A34><</span><span class="token generic-function generic class-name">AddressBook</span><span class="token generic-function generic class-name operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>103</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>For schemas without explicit <code>[id=...]</code>, generated registration uses computed numeric IDs:</p> |
| <div class="language-cpp codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-cpp codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token generic-function function" style=color:#d73a49>register_enum</span><span class="token generic-function generic class-name operator" style=color:#393A34><</span><span class="token generic-function generic class-name">Status</span><span class="token generic-function generic class-name operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>1124725126</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token generic-function function" style=color:#d73a49>register_union</span><span class="token generic-function generic class-name operator" style=color:#393A34><</span><span class="token generic-function generic class-name">Wrapper</span><span class="token generic-function generic class-name operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>1471345060</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token generic-function function" style=color:#d73a49>register_struct</span><span class="token generic-function generic class-name operator" style=color:#393A34><</span><span class="token generic-function generic class-name">Envelope</span><span class="token generic-function generic class-name operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>3022445236</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token generic-function function" style=color:#d73a49>register_union</span><span class="token generic-function generic class-name operator" style=color:#393A34><</span><span class="token generic-function generic class-name">Envelope</span><span class="token generic-function generic class-name double-colon punctuation" style=color:#393A34>::</span><span class="token generic-function generic class-name">Detail</span><span class="token generic-function generic class-name operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>1609214087</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token generic-function function" style=color:#d73a49>register_struct</span><span class="token generic-function generic class-name operator" style=color:#393A34><</span><span class="token generic-function generic class-name">Envelope</span><span class="token generic-function generic class-name double-colon punctuation" style=color:#393A34>::</span><span class="token generic-function generic class-name">Payload</span><span class="token generic-function generic class-name operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>2862577837</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><br/></div></code></pre></div></div> |
| <p>If <code>option enable_auto_type_id = false;</code> is set:</p> |
| <div class="language-cpp codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-cpp codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token generic-function function" style=color:#d73a49>register_struct</span><span class="token generic-function generic class-name operator" style=color:#393A34><</span><span class="token generic-function generic class-name">Config</span><span class="token generic-function generic class-name operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token string" style=color:#e3116c>"myapp.models.Config"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token generic-function function" style=color:#d73a49>register_union</span><span class="token generic-function generic class-name operator" style=color:#393A34><</span><span class="token generic-function generic class-name">Holder</span><span class="token generic-function generic class-name operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token string" style=color:#e3116c>"myapp.models.Holder"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=usage-3>Usage<a href=#usage-3 class=hash-link aria-label="Direct link to Usage" title="Direct link to Usage" translate=no></a></h3> |
| <div class="language-cpp codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-cpp codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">addressbook</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">Person person</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">person</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>set_name</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string" style=color:#e3116c>"Alice"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token operator" style=color:#393A34>*</span><span class="token plain">person</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>mutable_pet</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> addressbook</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token class-name">Animal</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token function" style=color:#d73a49>dog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">addressbook</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">Dog</span><span class="token punctuation" style=color:#393A34>{</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>auto</span><span class="token plain"> bytes </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> person</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>to_bytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>auto</span><span class="token plain"> restored </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> addressbook</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token class-name">Person</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token function" style=color:#d73a49>from_bytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">bytes</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>value</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><br/></div></code></pre></div></div> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=go>Go<a href=#go class=hash-link aria-label="Direct link to Go" title="Direct link to Go" translate=no></a></h2> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=output-layout-4>Output Layout<a href=#output-layout-4 class=hash-link aria-label="Direct link to Output Layout" title="Direct link to Output Layout" translate=no></a></h3> |
| <p>Go output path depends on schema options and <code>--go_out</code>.</p> |
| <p>For <code>addressbook.fdl</code>, <code>go_package</code> is configured and generated output follows the configured import path/package (for example under your <code>--go_out</code> root).</p> |
| <p>Without <code>go_package</code>, output uses the requested <code>--go_out</code> directory and package-derived file naming.</p> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=type-generation-4>Type Generation<a href=#type-generation-4 class=hash-link aria-label="Direct link to Type Generation" title="Direct link to Type Generation" translate=no></a></h3> |
| <p>Nested types use underscore naming by default (<code>Person_PhoneType</code>, <code>Person_PhoneNumber</code>):</p> |
| <div class="language-go codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-go codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>type</span><span class="token plain"> Person_PhoneType </span><span class="token builtin">int32</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> Person_PhoneTypeMobile Person_PhoneType </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>0</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> Person_PhoneTypeHome Person_PhoneType </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> Person_PhoneTypeWork Person_PhoneType </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>type</span><span class="token plain"> Person_PhoneNumber </span><span class="token keyword" style=color:#00009f>struct</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> Number </span><span class="token builtin">string</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>`fory:"id=1"`</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> PhoneType Person_PhoneType </span><span class="token string" style=color:#e3116c>`fory:"id=2"`</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>Messages generate structs with <code>fory</code> tags and byte helpers:</p> |
| <div class="language-go codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-go codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>type</span><span class="token plain"> Person </span><span class="token keyword" style=color:#00009f>struct</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> Name </span><span class="token builtin">string</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>`fory:"id=1"`</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> Id </span><span class="token builtin">int32</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>`fory:"id=2"`</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> Phones </span><span class="token punctuation" style=color:#393A34>[</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain">Person_PhoneNumber </span><span class="token string" style=color:#e3116c>`fory:"id=7,type=list"`</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> Pet Animal </span><span class="token string" style=color:#e3116c>`fory:"id=8"`</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>func</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">m </span><span class="token operator" style=color:#393A34>*</span><span class="token plain">Person</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>ToBytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>[</span><span class="token punctuation" style=color:#393A34>]</span><span class="token builtin">byte</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token builtin">error</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>...</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>func</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">m </span><span class="token operator" style=color:#393A34>*</span><span class="token plain">Person</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>FromBytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data </span><span class="token punctuation" style=color:#393A34>[</span><span class="token punctuation" style=color:#393A34>]</span><span class="token builtin">byte</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token builtin">error</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>...</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>Unions generate typed case structs with constructors/accessors/visitor APIs:</p> |
| <div class="language-go codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-go codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>type</span><span class="token plain"> AnimalCase </span><span class="token builtin">uint32</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>type</span><span class="token plain"> Animal </span><span class="token keyword" style=color:#00009f>struct</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> case_ AnimalCase</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> value any</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>func</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>DogAnimal</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">v </span><span class="token operator" style=color:#393A34>*</span><span class="token plain">Dog</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> Animal </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>...</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>func</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>CatAnimal</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">v </span><span class="token operator" style=color:#393A34>*</span><span class="token plain">Cat</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> Animal </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>...</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>func</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">u Animal</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>Case</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> AnimalCase </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>...</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>func</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">u Animal</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>AsDog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token operator" style=color:#393A34>*</span><span class="token plain">Dog</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token builtin">bool</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>...</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>func</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">u Animal</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>Visit</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">visitor AnimalVisitor</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token builtin">error</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>...</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=registration-3>Registration<a href=#registration-3 class=hash-link aria-label="Direct link to Registration" title="Direct link to Registration" translate=no></a></h3> |
| <p>Generated registration function:</p> |
| <div class="language-go codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-go codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>func</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>RegisterTypes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">f </span><span class="token operator" style=color:#393A34>*</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token builtin">error</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>if</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>:=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>RegisterUnion</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Animal</span><span class="token punctuation" style=color:#393A34>{</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>106</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>NewUnionSerializer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token operator" style=color:#393A34>...</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>!=</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>nil</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> err</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>if</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>:=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>RegisterEnum</span><span class="token punctuation" style=color:#393A34>(</span><span class="token function" style=color:#d73a49>Person_PhoneType</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>0</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>101</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>!=</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>nil</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> err</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>if</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>:=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>RegisterStruct</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Person_PhoneNumber</span><span class="token punctuation" style=color:#393A34>{</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>102</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>!=</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>nil</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> err</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>if</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>:=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>RegisterStruct</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Person</span><span class="token punctuation" style=color:#393A34>{</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>100</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>!=</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>nil</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> err</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>nil</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>For schemas without explicit <code>[id=...]</code>, generated registration uses computed numeric IDs:</p> |
| <div class="language-go codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-go codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>if</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>:=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>RegisterEnum</span><span class="token punctuation" style=color:#393A34>(</span><span class="token function" style=color:#d73a49>Status</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>0</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1124725126</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>!=</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>nil</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>...</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>if</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>:=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>RegisterUnion</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Wrapper</span><span class="token punctuation" style=color:#393A34>{</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1471345060</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>NewUnionSerializer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token operator" style=color:#393A34>...</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>!=</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>nil</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>...</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>if</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>:=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>RegisterStruct</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Envelope</span><span class="token punctuation" style=color:#393A34>{</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>3022445236</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>!=</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>nil</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>...</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>if</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>:=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>RegisterUnion</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Envelope_Detail</span><span class="token punctuation" style=color:#393A34>{</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1609214087</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>NewUnionSerializer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token operator" style=color:#393A34>...</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>!=</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>nil</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>...</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>if</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>:=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>RegisterStruct</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Envelope_Payload</span><span class="token punctuation" style=color:#393A34>{</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2862577837</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>!=</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>nil</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>...</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>If <code>option enable_auto_type_id = false;</code> is set:</p> |
| <div class="language-go codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-go codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>if</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>:=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>RegisterStructByName</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Config</span><span class="token punctuation" style=color:#393A34>{</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"myapp.models.Config"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>!=</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>nil</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>...</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>if</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>:=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>RegisterUnionByName</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Holder</span><span class="token punctuation" style=color:#393A34>{</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"myapp.models.Holder"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>NewUnionSerializer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token operator" style=color:#393A34>...</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>!=</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>nil</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>...</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p><code>go_nested_type_style</code> controls nested type naming:</p> |
| <div class="language-protobuf codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-protobuf codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>option</span><span class="token plain"> go_nested_type_style </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"camelcase"</span><span class="token punctuation" style=color:#393A34>;</span><br/></div></code></pre></div></div> |
| <p>The CLI flag <code>--go_nested_type_style</code> overrides this schema option when both are set.</p> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=usage-4>Usage<a href=#usage-4 class=hash-link aria-label="Direct link to Usage" title="Direct link to Usage" translate=no></a></h3> |
| <div class="language-go codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-go codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">person </span><span class="token operator" style=color:#393A34>:=</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>&</span><span class="token plain">Person</span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> Name</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"Alice"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> Pet</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>DogAnimal</span><span class="token punctuation" style=color:#393A34>(</span><span class="token operator" style=color:#393A34>&</span><span class="token plain">Dog</span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain">Name</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"Rex"</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>:=</span><span class="token plain"> person</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>ToBytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>if</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>!=</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>nil</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token function" style=color:#d73a49>panic</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">err</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>var</span><span class="token plain"> restored Person</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>if</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>:=</span><span class="token plain"> restored</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>FromBytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> err </span><span class="token operator" style=color:#393A34>!=</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>nil</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token function" style=color:#d73a49>panic</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">err</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=grpc-service-companions-3>gRPC Service Companions<a href=#grpc-service-companions-3 class=hash-link aria-label="Direct link to gRPC Service Companions" title="Direct link to gRPC Service Companions" translate=no></a></h3> |
| <p>When a schema contains services and the compiler is run with <code>--grpc</code>, Go |
| generation emits one <code><module>_grpc.go</code> file next to the model file. The |
| companion contains grpc-go client and server interfaces plus a Fory-backed |
| <code>CodecV2</code>.</p> |
| <div class="language-go codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-go codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>type</span><span class="token plain"> AddressBookServiceClient </span><span class="token keyword" style=color:#00009f>interface</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token function" style=color:#d73a49>Lookup</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">ctx context</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Context</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> in </span><span class="token operator" style=color:#393A34>*</span><span class="token plain">Person</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> opts </span><span class="token operator" style=color:#393A34>...</span><span class="token plain">grpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">CallOption</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token operator" style=color:#393A34>*</span><span class="token plain">AddressBook</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token builtin">error</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>func</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>NewAddressBookServiceClient</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">cc grpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">ClientConnInterface</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> AddressBookServiceClient </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>...</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>type</span><span class="token plain"> CodecV2 </span><span class="token keyword" style=color:#00009f>struct</span><span class="token punctuation" style=color:#393A34>{</span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>The generated codec uses the same package-level thread-safe Fory runtime as the |
| generated <code>ToBytes</code> and <code>FromBytes</code> helpers. Applications should pass |
| <code>CodecV2{}</code> to grpc-go server options, and generated clients force the same |
| codec on each call:</p> |
| <div class="language-go codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-go codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">server </span><span class="token operator" style=color:#393A34>:=</span><span class="token plain"> grpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>NewServer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">grpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>ForceServerCodecV2</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">addressbook</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">CodecV2</span><span class="token punctuation" style=color:#393A34>{</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">addressbook</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>RegisterAddressBookServiceServer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">server</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> service</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">client </span><span class="token operator" style=color:#393A34>:=</span><span class="token plain"> addressbook</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>NewAddressBookServiceClient</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">conn</span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <p>Go method names are exported as PascalCase identifiers, while the gRPC method |
| path keeps the exact service and method names from the schema. Regenerate both |
| peers after changing service or method names.</p> |
| <p>Applications compiling these files must provide grpc-go dependencies; Fory Go |
| packages do not add gRPC as a hard dependency.</p> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=c-1>C#<a href=#c-1 class=hash-link aria-label="Direct link to C#" title="Direct link to C#" translate=no></a></h2> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=output-layout-5>Output Layout<a href=#output-layout-5 class=hash-link aria-label="Direct link to Output Layout" title="Direct link to Output Layout" translate=no></a></h3> |
| <p>C# output is one <code>.cs</code> file per schema, for example:</p> |
| <ul> |
| <li class=""><code><csharp_out>/addressbook/Addressbook.cs</code></li> |
| </ul> |
| <p>The C# model file name uses the normalized PascalCase source file stem. For |
| example, <code>service.fdl</code> generates <code>Service.cs</code>, <code>order-events.fdl</code> generates |
| <code>OrderEvents.cs</code>, and <code>123-schema.fdl</code> generates <code>Schema123Schema.cs</code>.</p> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=type-generation-5>Type Generation<a href=#type-generation-5 class=hash-link aria-label="Direct link to Type Generation" title="Direct link to Type Generation" translate=no></a></h3> |
| <p>Messages generate <code>[ForyStruct]</code> classes with C# properties and byte helpers:</p> |
| <div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-csharp codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token punctuation" style=color:#393A34>[</span><span class="token attribute class-name">ForyStruct</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>sealed</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>partial</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Person</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token return-type class-name keyword" style=color:#00009f>string</span><span class="token plain"> Name </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>get</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>set</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>string</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Empty</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token return-type class-name keyword" style=color:#00009f>int</span><span class="token plain"> Id </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>get</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>set</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token return-type class-name">List</span><span class="token return-type class-name punctuation" style=color:#393A34><</span><span class="token return-type class-name">Person</span><span class="token return-type class-name punctuation" style=color:#393A34>.</span><span class="token return-type class-name">PhoneNumber</span><span class="token return-type class-name punctuation" style=color:#393A34>></span><span class="token plain"> Phones </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>get</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>set</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>new</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token return-type class-name">Animal</span><span class="token plain"> Pet </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>get</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>set</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>null</span><span class="token operator" style=color:#393A34>!</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token return-type class-name keyword" style=color:#00009f>byte</span><span class="token return-type class-name punctuation" style=color:#393A34>[</span><span class="token return-type class-name punctuation" style=color:#393A34>]</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>ToBytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token range operator" style=color:#393A34>..</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> </span><span class="token return-type class-name">Person</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>FromBytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name keyword" style=color:#00009f>byte</span><span class="token class-name punctuation" style=color:#393A34>[</span><span class="token class-name punctuation" style=color:#393A34>]</span><span class="token plain"> data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token range operator" style=color:#393A34>..</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>Unions generate <code>[ForyUnion]</code> ADTs. <code>Unknown(UnknownCase)</code> is the |
| Fory-provided forward-compatibility carrier marked with <code>[ForyUnknownCase]</code>. |
| The marker only selects the carrier and does not add an entry to the schema case |
| table. Schema-defined cases use non-negative <code>[ForyCase]</code> IDs. If a case needs |
| non-default schema encoding, the generated <code>[ForyCase]</code> carries <code>Type</code>. Known |
| case record names are PascalCase FDL case names; payload types are emitted as |
| qualified references when needed to avoid name conflicts. A typed union must |
| have at least one non-<code>Unknown</code> case.</p> |
| <div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-csharp codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token punctuation" style=color:#393A34>[</span><span class="token attribute class-name">ForyUnion</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>abstract</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>partial</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>record</span><span class="token plain"> </span><span class="token class-name">Animal</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>private</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>Animal</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token attribute class-name">ForyUnknownCase</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>sealed</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>partial</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>record</span><span class="token plain"> </span><span class="token class-name">Unknown</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">UnknownCase</span><span class="token plain"> Value</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token type-list class-name">Animal</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token attribute class-name">ForyCase</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>(</span><span class="token attribute attribute-arguments number" style=color:#36acaa>0</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>sealed</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>partial</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>record</span><span class="token plain"> </span><span class="token class-name">Dog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>global</span><span class="token punctuation" style=color:#393A34>::</span><span class="token class-name">addressbook</span><span class="token class-name punctuation" style=color:#393A34>.</span><span class="token class-name">Dog</span><span class="token plain"> Value</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token type-list class-name">Animal</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token attribute class-name">ForyCase</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>(</span><span class="token attribute attribute-arguments number" style=color:#36acaa>1</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>sealed</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>partial</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>record</span><span class="token plain"> </span><span class="token class-name">Cat</span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>global</span><span class="token punctuation" style=color:#393A34>::</span><span class="token class-name">addressbook</span><span class="token class-name punctuation" style=color:#393A34>.</span><span class="token class-name">Cat</span><span class="token plain"> Value</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token type-list class-name">Animal</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=module-installation>Module Installation<a href=#module-installation class=hash-link aria-label="Direct link to Module Installation" title="Direct link to Module Installation" translate=no></a></h3> |
| <p>Each schema generates a module class that installs imported modules first and |
| then registers the local schema types:</p> |
| <div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-csharp codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">AddressbookForyModule</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> </span><span class="token return-type class-name keyword" style=color:#00009f>void</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>Install</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Fory</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token generic-method function" style=color:#d73a49>Register</span><span class="token generic-method generic class-name punctuation" style=color:#393A34><</span><span class="token generic-method generic class-name">addressbook</span><span class="token generic-method generic class-name punctuation" style=color:#393A34>.</span><span class="token generic-method generic class-name">Animal</span><span class="token generic-method generic class-name punctuation" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>uint</span><span class="token punctuation" style=color:#393A34>)</span><span class="token number" style=color:#36acaa>106</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token generic-method function" style=color:#d73a49>Register</span><span class="token generic-method generic class-name punctuation" style=color:#393A34><</span><span class="token generic-method generic class-name">addressbook</span><span class="token generic-method generic class-name punctuation" style=color:#393A34>.</span><span class="token generic-method generic class-name">Person</span><span class="token generic-method generic class-name punctuation" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>uint</span><span class="token punctuation" style=color:#393A34>)</span><span class="token number" style=color:#36acaa>100</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic>// ...</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>The C# model file basename and module class both use the normalized source file |
| stem. They do not use <code>csharp_namespace</code> and they do not use gRPC service names. |
| For example, <code>service.fdl</code> generates <code>Service.cs</code> and <code>ServiceForyModule</code>, |
| while <code>order-events.fdl</code> generates <code>OrderEvents.cs</code> and |
| <code>OrderEventsForyModule</code>. A gRPC service named <code>Greeter</code> generates the service |
| companion <code>GreeterGrpc.cs</code>; it does not change the schema module name. To get |
| <code>GreeterForyModule</code>, name the schema file <code>greeter.fdl</code> or <code>Greeter.fdl</code>.</p> |
| <p>This source-file rule lets several schemas target the same C# namespace without |
| colliding. No namespace-derived or service-derived module alias is generated.</p> |
| <p>When explicit type IDs are not provided, generated installation uses computed |
| numeric IDs (same behavior as other targets).</p> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=grpc-service-companions-4>gRPC Service Companions<a href=#grpc-service-companions-4 class=hash-link aria-label="Direct link to gRPC Service Companions" title="Direct link to gRPC Service Companions" translate=no></a></h3> |
| <p>When a schema contains services and the compiler is run with <code>--grpc</code>, C# |
| generation emits one <code><ServiceName>Grpc.cs</code> file per service next to the schema |
| model file.</p> |
| <div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-csharp codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>partial</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">AddressBookService</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>abstract</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>partial</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">AddressBookServiceBase</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>virtual</span><span class="token plain"> </span><span class="token return-type class-name">Task</span><span class="token return-type class-name punctuation" style=color:#393A34><</span><span class="token return-type class-name">AddressBook</span><span class="token return-type class-name punctuation" style=color:#393A34>></span><span class="token plain"> </span><span class="token function" style=color:#d73a49>Lookup</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">Person</span><span class="token plain"> request</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token named-parameter punctuation" style=color:#393A34>grpc</span><span class="token punctuation" style=color:#393A34>::</span><span class="token class-name">ServerCallContext</span><span class="token plain"> context</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token range operator" style=color:#393A34>..</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>partial</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">AddressBookServiceClient</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> grpc</span><span class="token punctuation" style=color:#393A34>::</span><span class="token plain">ClientBase</span><span class="token operator" style=color:#393A34><</span><span class="token plain">AddressBookServiceClient</span><span class="token operator" style=color:#393A34>></span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>virtual</span><span class="token plain"> </span><span class="token return-type class-name">AddressBook</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>Lookup</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Person</span><span class="token plain"> request</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token named-parameter punctuation" style=color:#393A34>grpc</span><span class="token punctuation" style=color:#393A34>::</span><span class="token class-name">CallOptions</span><span class="token plain"> options</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token range operator" style=color:#393A34>..</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>virtual</span><span class="token plain"> grpc</span><span class="token punctuation" style=color:#393A34>::</span><span class="token return-type class-name">AsyncUnaryCall</span><span class="token return-type class-name punctuation" style=color:#393A34><</span><span class="token return-type class-name">AddressBook</span><span class="token return-type class-name punctuation" style=color:#393A34>></span><span class="token plain"> </span><span class="token function" style=color:#d73a49>LookupAsync</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">Person</span><span class="token plain"> request</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token named-parameter punctuation" style=color:#393A34>grpc</span><span class="token punctuation" style=color:#393A34>::</span><span class="token class-name">CallOptions</span><span class="token plain"> options</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token range operator" style=color:#393A34>..</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> grpc</span><span class="token punctuation" style=color:#393A34>::</span><span class="token return-type class-name">ServerServiceDefinition</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>BindService</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">AddressBookServiceBase</span><span class="token plain"> serviceImpl</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token range operator" style=color:#393A34>..</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> </span><span class="token return-type class-name keyword" style=color:#00009f>void</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>BindService</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token named-parameter punctuation" style=color:#393A34>grpc</span><span class="token punctuation" style=color:#393A34>::</span><span class="token class-name">ServiceBinderBase</span><span class="token plain"> serviceBinder</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">AddressBookServiceBase</span><span class="token class-name punctuation" style=color:#393A34>?</span><span class="token plain"> serviceImpl</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token range operator" style=color:#393A34>..</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>Each generated method descriptor uses a static Fory-backed |
| <code>Grpc.Core.Marshaller<T></code> that reuses the schema module's <code>ThreadSafeFory</code>. |
| Deserialization reads the gRPC body through <code>PayloadAsReadOnlySequence()</code> and |
| rejects trailing bytes after the single Fory frame. Generated service companions |
| do not use protobuf parsers and do not create Fory instances per RPC call.</p> |
| <p>Streaming RPCs map to standard gRPC C# APIs:</p> |
| <table><thead><tr><th>IDL shape<th>Server method<th>Client method<tbody><tr><td><code>rpc A (Req) returns (Res)</code><td><code>Task<Res> A(Req request, ServerCallContext context)</code><td><code>A(...)</code> and <code>AAsync(...)</code><tr><td><code>rpc A (Req) returns (stream Res)</code><td><code>Task A(Req request, IServerStreamWriter<Res> responseStream, ...)</code><td><code>AsyncServerStreamingCall<Res> A(...)</code><tr><td><code>rpc A (stream Req) returns (Res)</code><td><code>Task<Res> A(IAsyncStreamReader<Req> requestStream, ...)</code><td><code>AsyncClientStreamingCall<Req, Res> A(...)</code><tr><td><code>rpc A (stream Req) returns (stream Res)</code><td><code>Task A(IAsyncStreamReader<Req> requestStream, IServerStreamWriter<Res> ...)</code><td><code>AsyncDuplexStreamingCall<Req, Res> A(...)</code></table> |
| <p>Applications compiling generated C# service files must provide <code>Grpc.Core.Api</code> |
| and their chosen .NET gRPC hosting or client package, such as <code>Grpc.AspNetCore</code> |
| or <code>Grpc.Net.Client</code>. The <code>Apache.Fory</code> package does not add gRPC dependencies |
| as hard dependencies.</p> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=javascripttypescript>JavaScript/TypeScript<a href=#javascripttypescript class=hash-link aria-label="Direct link to JavaScript/TypeScript" title="Direct link to JavaScript/TypeScript" translate=no></a></h2> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=output-layout-6>Output Layout<a href=#output-layout-6 class=hash-link aria-label="Direct link to Output Layout" title="Direct link to Output Layout" translate=no></a></h3> |
| <p>JavaScript/TypeScript output is one <code>.ts</code> file per schema, for example:</p> |
| <ul> |
| <li class=""><code><javascript_out>/addressbook.ts</code></li> |
| </ul> |
| <p>When the schema contains services, JavaScript can also emit service companions:</p> |
| <ul> |
| <li class=""><code><javascript_out>/addressbook_grpc.ts</code> with <code>--grpc</code></li> |
| <li class=""><code><javascript_out>/addressbook_grpc_web.ts</code> with <code>--grpc-web</code></li> |
| </ul> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=type-generation-6>Type Generation<a href=#type-generation-6 class=hash-link aria-label="Direct link to Type Generation" title="Direct link to Type Generation" translate=no></a></h3> |
| <p>Messages generate <code>export interface</code> declarations with camelCase field names:</p> |
| <div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>export</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>interface</span><span class="token plain"> </span><span class="token class-name">Person</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> name</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">string</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> id</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">number</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> phones</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> PhoneNumber</span><span class="token punctuation" style=color:#393A34>[</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> pet</span><span class="token operator" style=color:#393A34>?</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> Animal </span><span class="token operator" style=color:#393A34>|</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>null</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>Enums generate <code>export enum</code> declarations:</p> |
| <div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>export</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>enum</span><span class="token plain"> PhoneType </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token constant" style=color:#36acaa>MOBILE</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>0</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token constant" style=color:#36acaa>HOME</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token constant" style=color:#36acaa>WORK</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>Unions generate a discriminated union with a case enum:</p> |
| <div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>export</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>enum</span><span class="token plain"> AnimalCase </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token constant" style=color:#36acaa>DOG</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token constant" style=color:#36acaa>CAT</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>export</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>type</span><span class="token plain"> </span><span class="token class-name">Animal</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token operator" style=color:#393A34>|</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>case</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> AnimalCase</span><span class="token punctuation" style=color:#393A34>.</span><span class="token constant" style=color:#36acaa>DOG</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> value</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> Dog </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token operator" style=color:#393A34>|</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>case</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> AnimalCase</span><span class="token punctuation" style=color:#393A34>.</span><span class="token constant" style=color:#36acaa>CAT</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> value</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> Cat </span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>;</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=schema-helpers>Schema Helpers<a href=#schema-helpers class=hash-link aria-label="Direct link to Schema Helpers" title="Direct link to Schema Helpers" translate=no></a></h3> |
| <p>Each generated model file exports a registration helper for custom <code>Fory</code> |
| instances and root serialization helpers. The public API looks like:</p> |
| <div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>type</span><span class="token plain"> </span><span class="token class-name">Fory</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> Serializer </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>from</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"@apache-fory/core"</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>export</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>function</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>registerAddressbookTypes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> Fory</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> person</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token function-variable function" style=color:#d73a49>serialize</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">value</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> Person </span><span class="token operator" style=color:#393A34>|</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>null</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=></span><span class="token plain"> Uint8Array</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token function-variable function" style=color:#d73a49>deserialize</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">bytes</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> Uint8Array</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=></span><span class="token plain"> Person</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> serializer</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> Serializer</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>export</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> </span><span class="token function-variable function" style=color:#d73a49>serializePerson</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">value</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> Person </span><span class="token operator" style=color:#393A34>|</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>null</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=></span><span class="token plain"> Uint8Array</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>export</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> </span><span class="token function-variable function" style=color:#d73a49>deserializePerson</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">bytes</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> Uint8Array</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=></span><span class="token plain"> Person</span><span class="token punctuation" style=color:#393A34>;</span><br/></div></code></pre></div></div> |
| <p>Imported schema modules are registered automatically by <code>registerXxxTypes(fory)</code>. |
| Use <code>serializeX</code> and <code>deserializeX</code> for the generated default serialization |
| path. Call <code>registerXxxTypes(fory)</code> when the application manages its own <code>Fory</code> |
| instance. Generated gRPC companions import the generated helpers automatically.</p> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=grpc-service-companions-5>gRPC Service Companions<a href=#grpc-service-companions-5 class=hash-link aria-label="Direct link to gRPC Service Companions" title="Direct link to gRPC Service Companions" translate=no></a></h3> |
| <p>When a schema contains services and the compiler is run with <code>--grpc</code>, |
| JavaScript generation emits a Node.js companion named <code><module>_grpc.ts</code>. |
| The file contains service descriptors, handler interfaces, a client class, and a |
| server registration helper for <code>@grpc/grpc-js</code>.</p> |
| <div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>export</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>interface</span><span class="token plain"> </span><span class="token class-name">GreeterHandlers</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>extends</span><span class="token plain"> </span><span class="token class-name">grpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">UntypedServiceImplementation </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> sayHello</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> grpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">handleUnaryCall</span><span class="token operator" style=color:#393A34><</span><span class="token plain">HelloRequest</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> HelloReply</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>export</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>function</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>addGreeterService</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> server</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> grpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Server</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> handlers</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> GreeterHandlers</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>void</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>...</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>export</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">GreeterClient</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>extends</span><span class="token plain"> </span><span class="token class-name">grpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Client </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>...</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>When the compiler is run with <code>--grpc-web</code>, JavaScript generation emits a |
| browser companion named <code><module>_grpc_web.ts</code>. It contains callback clients for |
| <code>grpc-web</code>; services with unary RPCs also get promise clients:</p> |
| <div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>export</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">GreeterWebClient</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>...</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>export</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">GreeterWebPromiseClient</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>...</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>Node.js service companions import <code>@grpc/grpc-js</code>; browser companions import |
| <code>grpc-web</code>. Add those packages to the application that compiles or runs the |
| generated files.</p> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=swift>Swift<a href=#swift class=hash-link aria-label="Direct link to Swift" title="Direct link to Swift" translate=no></a></h2> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=output-layout-7>Output Layout<a href=#output-layout-7 class=hash-link aria-label="Direct link to Output Layout" title="Direct link to Output Layout" translate=no></a></h3> |
| <p>Swift output is one <code>.swift</code> file per schema, for example:</p> |
| <ul> |
| <li class=""><code><swift_out>/addressbook/addressbook.swift</code></li> |
| </ul> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=type-generation-7>Type Generation<a href=#type-generation-7 class=hash-link aria-label="Direct link to Type Generation" title="Direct link to Type Generation" translate=no></a></h3> |
| <p>The generator creates Swift models with split model macros and stable field/case IDs. |
| A typed union must include <code>@ForyUnknownCase case unknown(UnknownCase)</code> and at |
| least one non-<code>unknown</code> case; <code>unknown(UnknownCase)</code> is only the |
| Fory-provided forward-compatibility carrier. The marker only selects the carrier |
| and does not add an entry to the schema case table.</p> |
| <p>When package/namespace is non-empty, namespace shaping is controlled by <code>swift_namespace_style</code>:</p> |
| <ul> |
| <li class=""><code>enum</code> (default): nested enum namespace wrappers.</li> |
| <li class=""><code>flatten</code>: package-derived prefix on top-level type names (for example <code>Demo_Foo_User</code>).</li> |
| </ul> |
| <p>When package/namespace is empty, no enum wrapper or flatten prefix is applied.</p> |
| <p>For non-empty package with default <code>enum</code> style:</p> |
| <div class="language-swift codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-swift codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>enum</span><span class="token plain"> </span><span class="token class-name">Addressbook</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token attribute atrule" style=color:#00a4db>@ForyUnion</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>enum</span><span class="token plain"> </span><span class="token class-name">Animal</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token attribute atrule" style=color:#00a4db>@ForyUnknownCase</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>case</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>unknown</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">UnknownCase</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token attribute atrule" style=color:#00a4db>@ForyCase</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>0</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>case</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>dog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Addressbook</span><span class="token punctuation" style=color:#393A34>.</span><span class="token class-name">Dog</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token attribute atrule" style=color:#00a4db>@ForyCase</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>case</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>cat</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Addressbook</span><span class="token punctuation" style=color:#393A34>.</span><span class="token class-name">Cat</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token attribute atrule" style=color:#00a4db>@ForyStruct</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>struct</span><span class="token plain"> </span><span class="token class-name">Person</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token class-name">Equatable</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token attribute atrule" style=color:#00a4db>@ForyField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>var</span><span class="token plain"> name</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token class-name">String</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token string-literal string" style=color:#e3116c>""</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token attribute atrule" style=color:#00a4db>@ForyField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>8</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>var</span><span class="token plain"> pet</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token class-name">Addressbook</span><span class="token punctuation" style=color:#393A34>.</span><span class="token class-name">Animal</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>foryDefault</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>For non-empty package with <code>flatten</code> style:</p> |
| <div class="language-swift codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-swift codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token attribute atrule" style=color:#00a4db>@ForyStruct</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>struct</span><span class="token plain"> </span><span class="token class-name">Addressbook_Person</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token class-name">Equatable</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>...</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>The CLI flag <code>--swift_namespace_style</code> overrides schema option <code>swift_namespace_style</code> when both are set.</p> |
| <p>Unions are generated as tagged Swift enums with associated payload values. |
| Messages with <code>ref</code>/<code>weak_ref</code> fields are generated as <code>final class</code> models to preserve reference semantics. |
| Fixed or tagged integer encodings inside list/map fields are emitted as Swift |
| field type hints, for example <code>@ListField(element: .encoding(.fixed))</code> or |
| <code>@MapField(value: .encoding(.tagged))</code>. |
| For non-null fixed-width integer list elements, Swift classifies the field as |
| the corresponding Fory primitive packed-array type; fixed-width integer sets |
| remain Fory sets.</p> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=module-installation-1>Module Installation<a href=#module-installation-1 class=hash-link aria-label="Direct link to Module Installation" title="Direct link to Module Installation" translate=no></a></h3> |
| <p>Each schema includes a <code>ForyModule</code> owner with transitive import installation:</p> |
| <div class="language-swift codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-swift codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>enum</span><span class="token plain"> </span><span class="token class-name">ForyModule</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>func</span><span class="token plain"> </span><span class="token function-definition function" style=color:#d73a49>install</span><span class="token punctuation" style=color:#393A34>(</span><span class="token omit keyword" style=color:#00009f>_</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token class-name">Fory</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>throws</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>try</span><span class="token plain"> </span><span class="token class-name">ComplexPb</span><span class="token punctuation" style=color:#393A34>.</span><span class="token class-name">ForyModule</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>install</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Addressbook</span><span class="token punctuation" style=color:#393A34>.</span><span class="token class-name">Person</span><span class="token punctuation" style=color:#393A34>.</span><span class="token keyword" style=color:#00009f>self</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> id</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>100</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Addressbook</span><span class="token punctuation" style=color:#393A34>.</span><span class="token class-name">Animal</span><span class="token punctuation" style=color:#393A34>.</span><span class="token keyword" style=color:#00009f>self</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> id</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>106</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>With non-empty package and <code>flatten</code> style, the helper is prefixed too (for example <code>Addressbook_ForyModule</code>).</p> |
| <p>For schemas without explicit <code>[id=...]</code>, installation uses computed numeric IDs. |
| If <code>option enable_auto_type_id = false;</code> is set, generated code uses name-based registration APIs.</p> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=dart>Dart<a href=#dart class=hash-link aria-label="Direct link to Dart" title="Direct link to Dart" translate=no></a></h2> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=output-layout-8>Output Layout<a href=#output-layout-8 class=hash-link aria-label="Direct link to Output Layout" title="Direct link to Output Layout" translate=no></a></h3> |
| <p>Dart output is two files per schema: a main <code>.dart</code> file with annotated types and the IDL module owner, and a <code>.fory.dart</code> part file with generated serializers and metadata.</p> |
| <ul> |
| <li class=""><code><dart_out>/package/package.dart</code></li> |
| <li class=""><code><dart_out>/package/package.fory.dart</code></li> |
| </ul> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=type-generation-8>Type Generation<a href=#type-generation-8 class=hash-link aria-label="Direct link to Type Generation" title="Direct link to Type Generation" translate=no></a></h3> |
| <p>Messages generate <code>@ForyStruct</code> annotated <code>final class</code> declarations with <code>@ForyField</code> on each field:</p> |
| <div class="language-dart codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-dart codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token metadata function" style=color:#d73a49>@ForyStruct</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>final</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Person</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">Person</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token metadata function" style=color:#d73a49>@ForyField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">String</span><span class="token plain"> name </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token string-literal string" style=color:#e3116c>''</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token metadata function" style=color:#d73a49>@ForyField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token class-name">Int32Type</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> int id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>0</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token metadata function" style=color:#d73a49>@ForyField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>7</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">List</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">Person_PhoneNumber</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token plain"> phones </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">Person_PhoneNumber</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>[</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token metadata function" style=color:#d73a49>@ForyField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>8</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">Animal</span><span class="token plain"> pet </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token class-name">Animal</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>_empty</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>Enums generate Dart <code>enum</code> declarations with a <code>rawValue</code> getter and <code>fromRawValue</code> factory:</p> |
| <div class="language-dart codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-dart codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>enum</span><span class="token plain"> </span><span class="token class-name">Person_PhoneType</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> mobile</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> home</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> work</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> int </span><span class="token keyword" style=color:#00009f>get</span><span class="token plain"> rawValue </span><span class="token operator" style=color:#393A34>=</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>switch</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>this</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">Person_PhoneType</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">mobile </span><span class="token operator" style=color:#393A34>=</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token number" style=color:#36acaa>0</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">Person_PhoneType</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">home </span><span class="token operator" style=color:#393A34>=</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">Person_PhoneType</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">work </span><span class="token operator" style=color:#393A34>=</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> </span><span class="token class-name">Person_PhoneType</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>fromRawValue</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">int value</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>switch</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">value</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token number" style=color:#36acaa>0</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token class-name">Person_PhoneType</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">mobile</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token class-name">Person_PhoneType</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">home</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token class-name">Person_PhoneType</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">work</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> _ </span><span class="token operator" style=color:#393A34>=</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>throw</span><span class="token plain"> </span><span class="token class-name">StateError</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string-literal string" style=color:#e3116c>'Unknown Person_PhoneType raw value </span><span class="token string-literal interpolation punctuation" style=color:#393A34>$</span><span class="token string-literal interpolation expression">value</span><span class="token string-literal string" style=color:#e3116c>.'</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>Unions generate <code>@ForyUnion</code> annotated classes with factory constructors, a case enum, and a custom serializer:</p> |
| <div class="language-dart codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-dart codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>enum</span><span class="token plain"> </span><span class="token class-name">AnimalCase</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> dog</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> cat</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> int </span><span class="token keyword" style=color:#00009f>get</span><span class="token plain"> id </span><span class="token operator" style=color:#393A34>=</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>switch</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>this</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">AnimalCase</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dog </span><span class="token operator" style=color:#393A34>=</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">AnimalCase</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">cat </span><span class="token operator" style=color:#393A34>=</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token metadata function" style=color:#d73a49>@ForyUnion</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>final</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Animal</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>final</span><span class="token plain"> </span><span class="token class-name">AnimalCase</span><span class="token plain"> _case</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>final</span><span class="token plain"> </span><span class="token class-name">Object</span><span class="token operator" style=color:#393A34>?</span><span class="token plain"> _value</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> </span><span class="token class-name">Animal</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>_</span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>this</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">_case</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>this</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">_value</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>factory</span><span class="token plain"> </span><span class="token class-name">Animal</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>dog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Dog</span><span class="token plain"> value</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token class-name">Animal</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>_</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">AnimalCase</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dog</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> value</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>factory</span><span class="token plain"> </span><span class="token class-name">Animal</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>cat</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Cat</span><span class="token plain"> value</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token class-name">Animal</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>_</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">AnimalCase</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">cat</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> value</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> bool </span><span class="token keyword" style=color:#00009f>get</span><span class="token plain"> isDog </span><span class="token operator" style=color:#393A34>=</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> _case </span><span class="token operator" style=color:#393A34>==</span><span class="token plain"> </span><span class="token class-name">AnimalCase</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dog</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">Dog</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>get</span><span class="token plain"> dogValue </span><span class="token operator" style=color:#393A34>=</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> _value </span><span class="token operator" style=color:#393A34>as</span><span class="token plain"> </span><span class="token class-name">Dog</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic>// ...</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>Nested types use flat underscore naming (e.g., <code>Person_PhoneNumber</code>, <code>Person_PhoneType</code>).</p> |
| <p><code>list<T></code> fields generate ordered collection carriers and use the Fory list |
| protocol. <code>array<T></code> fields generate dense one-dimensional bool or numeric |
| carriers and use the specialized dense-array protocol. Generated code must not |
| choose <code>array<T></code> only because a language has an optimized list-like carrier; |
| the schema kind comes from the IDL.</p> |
| <table><thead><tr><th>IDL schema<th>Dart generated carrier<th>Notes<tbody><tr><td><code>list<int32></code><td><code>List<int></code><td>List protocol, varint element encoding<tr><td><code>list<fixed int32></code><td><code>List<int></code><td>List protocol, fixed-width element segment<tr><td><code>array<bool></code><td><code>BoolList</code><td>One byte per bool<tr><td><code>array<int8></code><td><code>Int8List</code><td>Dense signed bytes<tr><td><code>array<int16></code><td><code>Int16List</code><td>Dense little-endian int16<tr><td><code>array<int32></code><td><code>Int32List</code><td>Dense little-endian int32<tr><td><code>array<int64></code><td><code>Int64List</code><td>Dense little-endian int64<tr><td><code>array<uint8></code><td><code>Uint8List</code><td>Dense unsigned bytes<tr><td><code>array<uint16></code><td><code>Uint16List</code><td>Dense little-endian uint16<tr><td><code>array<uint32></code><td><code>Uint32List</code><td>Dense little-endian uint32<tr><td><code>array<uint64></code><td><code>Uint64List</code><td>Dense little-endian uint64<tr><td><code>array<float16></code><td><code>Float16List</code><td>Dense binary16 storage<tr><td><code>array<bfloat16></code><td><code>Bfloat16List</code><td>Dense bfloat16 storage<tr><td><code>array<float32></code><td><code>Float32List</code><td>Dense little-endian float32<tr><td><code>array<float64></code><td><code>Float64List</code><td>Dense little-endian float64</table> |
| <p>Generated Dart fields that use <code>ArrayType(element: BoolType())</code> must use |
| <code>BoolList</code>; plain <code>List<bool></code> remains the generated and handwritten carrier |
| for <code>list<bool></code>.</p> |
| <p>Reference tracking on list elements or map values uses the container sugar annotations:</p> |
| <div class="language-dart codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-dart codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token metadata function" style=color:#d73a49>@ListField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">element</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token class-name">DeclaredType</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">ref</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>true</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token metadata function" style=color:#d73a49>@ForyField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>3</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token class-name">List</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">Node</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token plain"> children </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">Node</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>[</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token metadata function" style=color:#d73a49>@MapField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">value</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token class-name">DeclaredType</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">ref</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>true</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token metadata function" style=color:#d73a49>@ForyField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token class-name">Map</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">String</span><span class="token generics punctuation" style=color:#393A34>,</span><span class="token generics"> </span><span class="token generics class-name">Node</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token plain"> byName </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">String</span><span class="token generics punctuation" style=color:#393A34>,</span><span class="token generics"> </span><span class="token generics class-name">Node</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>{</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>;</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=module-installation-2>Module Installation<a href=#module-installation-2 class=hash-link aria-label="Direct link to Module Installation" title="Direct link to Module Installation" translate=no></a></h3> |
| <p>Each generated Dart IDL library includes a module owner named after the input |
| file, such as <code>AddressbookForyModule</code> for <code>addressbook.dart</code>. The module |
| installs imported modules first and then registers every local schema type with |
| its default IDL identity:</p> |
| <div class="language-dart codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-dart codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>abstract</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>final</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">AddressbookForyModule</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>void</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>install</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Fory</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name namespace" style=opacity:0.7>complex_pb</span><span class="token class-name namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token class-name">ComplexPbForyModule</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>install</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token function" style=color:#d73a49>_registerType</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token class-name">Person</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token function" style=color:#d73a49>_registerType</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token class-name">Dog</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> </span><span class="token class-name">Fory</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>getFory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>static</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>void</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>_registerType</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Fory</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token class-name">Type</span><span class="token plain"> type</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>if</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">type </span><span class="token operator" style=color:#393A34>==</span><span class="token plain"> </span><span class="token class-name">Person</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token function" style=color:#d73a49>registerGeneratedStruct</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> _personForySchema</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> id</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>100</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> namespace</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>null</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> typeName</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>null</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic>// ... other types</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=usage-5>Usage<a href=#usage-5 class=hash-link aria-label="Direct link to Usage" title="Direct link to Usage" translate=no></a></h3> |
| <div class="language-dart codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-dart codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> </span><span class="token string-literal string" style=color:#e3116c>'package:fory/fory.dart'</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> </span><span class="token string-literal string" style=color:#e3116c>'generated/addressbook/addressbook.dart'</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>void</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>main</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>final</span><span class="token plain"> fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token class-name">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">AddressbookForyModule</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>install</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>final</span><span class="token plain"> person </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token class-name">Person</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">name </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token string-literal string" style=color:#e3116c>'Alice'</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>final</span><span class="token plain"> bytes </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>serialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">person</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>final</span><span class="token plain"> roundTrip </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">deserialize</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">Person</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">bytes</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=grpc-service-companions-6>gRPC Service Companions<a href=#grpc-service-companions-6 class=hash-link aria-label="Direct link to gRPC Service Companions" title="Direct link to gRPC Service Companions" translate=no></a></h3> |
| <p>When a schema contains services and the compiler is run with <code>--grpc</code>, Dart |
| generation emits one <code><module>_grpc.dart</code> file per schema next to the model |
| types. It targets <code>package:grpc</code>. Request and response serialization uses a Fory |
| runtime the companion obtains automatically and that registers the schema's |
| types on first use, so no manual registration is required; an application may |
| optionally inject a custom <code>Fory</code> via the schema module's <code>install(...)</code> before |
| the first call.</p> |
| <p>All four RPC modes are generated: unary, server-streaming, client-streaming, and |
| bidirectional. The client class extends <code>Client</code>; the service base class extends |
| <code>Service</code> and self-registers each method with <code>$addMethod</code>.</p> |
| <div class="language-dart codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-dart codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">GreeterClient</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>extends</span><span class="token plain"> </span><span class="token class-name">Client</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic>// Single response: ResponseFuture. Streaming response: ResponseStream.</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">ResponseFuture</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">HelloReply</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token plain"> </span><span class="token function" style=color:#d73a49>sayHello</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">HelloRequest</span><span class="token plain"> request</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token class-name">CallOptions</span><span class="token operator" style=color:#393A34>?</span><span class="token plain"> options</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">ResponseStream</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">HelloReply</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token plain"> </span><span class="token function" style=color:#d73a49>sayHellos</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">HelloRequest</span><span class="token plain"> request</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token class-name">CallOptions</span><span class="token operator" style=color:#393A34>?</span><span class="token plain"> options</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">ResponseFuture</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">HelloReply</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token plain"> </span><span class="token function" style=color:#d73a49>collectHellos</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Stream</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">HelloRequest</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token plain"> request</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token class-name">CallOptions</span><span class="token operator" style=color:#393A34>?</span><span class="token plain"> options</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">ResponseStream</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">HelloReply</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token plain"> </span><span class="token function" style=color:#d73a49>chatHellos</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Stream</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">HelloRequest</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token plain"> request</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token class-name">CallOptions</span><span class="token operator" style=color:#393A34>?</span><span class="token plain"> options</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>abstract</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">GreeterServiceBase</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>extends</span><span class="token plain"> </span><span class="token class-name">Service</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">Future</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">HelloReply</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token plain"> </span><span class="token function" style=color:#d73a49>sayHello</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">ServiceCall</span><span class="token plain"> call</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token class-name">HelloRequest</span><span class="token plain"> request</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">Stream</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">HelloReply</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token plain"> </span><span class="token function" style=color:#d73a49>sayHellos</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">ServiceCall</span><span class="token plain"> call</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token class-name">HelloRequest</span><span class="token plain"> request</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">Future</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">HelloReply</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token plain"> </span><span class="token function" style=color:#d73a49>collectHellos</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">ServiceCall</span><span class="token plain"> call</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token class-name">Stream</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">HelloRequest</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token plain"> request</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">Stream</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">HelloReply</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token plain"> </span><span class="token function" style=color:#d73a49>chatHellos</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">ServiceCall</span><span class="token plain"> call</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token class-name">Stream</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">HelloRequest</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token plain"> request</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>A single-response client method returns <code>ResponseFuture<R></code> (client-streaming |
| adapts the streaming call with <code>.single</code>); a streaming-response method returns |
| <code>ResponseStream<R></code>. On the server, implementations override the abstract methods, |
| which receive a single request as <code>Q</code> and a client-streaming request as |
| <code>Stream<Q></code>, and return a <code>Future</code> for single responses or a <code>Stream</code> for |
| streaming responses. |
| Applications compiling these files must provide a <code>grpc</code> dependency; the Fory Dart |
| runtime does not add one. The original IDL method names are used in the gRPC wire |
| paths.</p> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=kotlin>Kotlin<a href=#kotlin class=hash-link aria-label="Direct link to Kotlin" title="Direct link to Kotlin" translate=no></a></h2> |
| <p>The Kotlin target emits Kotlin source only. The compiler does not generate Java |
| files.</p> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=output-layout-9>Output Layout<a href=#output-layout-9 class=hash-link aria-label="Direct link to Output Layout" title="Direct link to Output Layout" translate=no></a></h3> |
| <p>For source file <code>addressbook.fdl</code> with <code>package addressbook</code>, Kotlin output is |
| generated under:</p> |
| <ul> |
| <li class=""><code><kotlin_out>/addressbook/</code></li> |
| <li class="">Type files: <code>AddressBook.kt</code>, <code>Person.kt</code>, <code>Dog.kt</code>, <code>Cat.kt</code>, <code>Animal.kt</code></li> |
| <li class="">Schema module: <code>AddressbookForyModule.kt</code></li> |
| </ul> |
| <p>The schema module name is derived from the source file stem. Schemas in the same |
| Kotlin package need distinct generated file names; duplicate generated Kotlin |
| file paths are rejected before files are written.</p> |
| <p>If <code>option kotlin_package = "...";</code> is present, the output path and Kotlin |
| package use that option. Otherwise Kotlin uses the FDL package. A Kotlin import |
| graph cannot mix default-package schemas with named Kotlin packages. |
| Registration still uses the FDL package so cross-language type names stay |
| stable.</p> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=type-generation-9>Type Generation<a href=#type-generation-9 class=hash-link aria-label="Direct link to Type Generation" title="Direct link to Type Generation" translate=no></a></h3> |
| <p>Messages generate Kotlin <code>data class</code> declarations by default:</p> |
| <div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token annotation builtin">@ForyStruct</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>data</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>Person</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation builtin">@field:ForyField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>val</span><span class="token plain"> name</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> String</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation builtin">@field:ForyField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>7</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>val</span><span class="token plain"> phones</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> List</span><span class="token operator" style=color:#393A34><</span><span class="token plain">PersonPhoneNumber</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation builtin">@field:ForyField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>8</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>val</span><span class="token plain"> pet</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> Animal</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>fun</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>toBytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> ByteArray </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> AddressbookForyModule</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>getFory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>serialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>this</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>companion</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>object</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>fun</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>fromBytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">bytes</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> ByteArray</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> Person </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> AddressbookForyModule</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>getFory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>deserialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">bytes</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> Person</span><span class="token operator" style=color:#393A34>::</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">java</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>Messages that participate in compiler-detected construction cycles generate |
| normal mutable classes so the generated serializer can publish the instance |
| before reading back-references:</p> |
| <div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token annotation builtin">@ForyStruct</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>Node</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation builtin">@ForyField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>var</span><span class="token plain"> id</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> String </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token string-literal singleline string" style=color:#e3116c>""</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation builtin">@Ref</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation builtin">@ForyField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>var</span><span class="token plain"> parent</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> Node</span><span class="token operator" style=color:#393A34>?</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>null</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>Generated Kotlin IDL sources express nullability with Kotlin <code>?</code>, not Fory |
| <code>@Nullable</code>, including mutable classes emitted for compiler-detected |
| construction cycles.</p> |
| <p>Enums generate Kotlin enum classes with stable Fory enum IDs. Unions generate |
| sealed classes with <code>@ForyUnion</code>; the Fory-provided <code>Unknown(UnknownCase)</code> |
| carrier is marked with <code>@ForyUnknownCase</code>. The marker only selects the carrier |
| and does not add an entry to the schema case table. Schema-defined cases may use |
| case IDs <code>0..N</code> and hold a single <code>value</code> property. A typed union must have at |
| least one non-<code>Unknown</code> case.</p> |
| <div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>package</span><span class="token plain"> addressbook</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> org</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">apache</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">annotation</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">ForyCase</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> org</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">apache</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">annotation</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">ForyUnion</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> org</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">apache</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">annotation</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">ForyUnknownCase</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> org</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">apache</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">type</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">union</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">UnknownCase</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token annotation builtin">@ForyUnion</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>sealed</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> Animal </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation builtin">@ForyUnknownCase</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>data</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>Unknown</span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>val</span><span class="token plain"> value</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> UnknownCase</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>Animal</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation builtin">@ForyCase</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>0</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>data</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>Dog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>val</span><span class="token plain"> value</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> addressbook</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Dog</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>Animal</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>Packaged Kotlin output keeps the schema case name and qualifies the payload |
| type when both have the same simple name. If a target output mode cannot express |
| a legal qualifier for a conflict, the compiler appends <code>Case</code> to the generated |
| case class name.</p> |
| <p>Kotlin <code>int32</code>, <code>int64</code>, <code>uint32</code>, and <code>uint64</code> fields use xlang varint |
| encoding by default, so generated Kotlin does not emit <code>@VarInt</code> for the |
| default case. It emits <code>@Fixed</code> or <code>@Tagged</code> only when the schema requests that |
| non-default encoding. <code>duration</code> maps to <code>kotlin.time.Duration</code>, and infinite |
| durations are rejected when encoded. Dense <code>array<float16></code> and |
| <code>array<bfloat16></code> use the Java core <code>Float16Array</code> and <code>BFloat16Array</code> |
| carriers. Generated Kotlin IDL uses <code>@ArrayType ByteArray</code> for <code>array<int8></code>, |
| including nested positions.</p> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=schema-module-1>Schema Module<a href=#schema-module-1 class=hash-link aria-label="Direct link to Schema Module" title="Direct link to Schema Module" translate=no></a></h3> |
| <p>Generated schema modules register schema types and resolve KSP-generated |
| serializers from the target class name. The package-owned helper Fory instance uses |
| <code>ForyKotlin.builder().withXlang(true)</code> with the schema module installed, so message |
| <code>toBytes</code>/<code>fromBytes</code> helpers work without caller-managed Fory setup. For |
| <code>addressbook.fdl</code>:</p> |
| <div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>object</span><span class="token plain"> AddressbookForyModule </span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> ForyModule </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>private</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>val</span><span class="token plain"> fory</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> ThreadSafeFory </span><span class="token keyword" style=color:#00009f>by</span><span class="token plain"> lazy </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> ForyKotlin</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>builder</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>withXlang</span><span class="token punctuation" style=color:#393A34>(</span><span class="token boolean" style=color:#36acaa>true</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>withRefTracking</span><span class="token punctuation" style=color:#393A34>(</span><span class="token boolean" style=color:#36acaa>true</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>withModule</span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>this</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>buildThreadSafeFory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>internal</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>fun</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>getFory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> ThreadSafeFory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>override</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>fun</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>install</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> Fory</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> KotlinSerializers</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>registerType</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> Person</span><span class="token operator" style=color:#393A34>::</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">java</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>100L</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> KotlinSerializers</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>registerSerializer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> Person</span><span class="token operator" style=color:#393A34>::</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">java</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> KotlinSerializers</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>registerUnion</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> Animal</span><span class="token operator" style=color:#393A34>::</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">java</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>106L</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p><code>registerUnion</code> discovers the generated <code><Target>_ForySerializer</code>; callers do |
| not pass a serializer instance.</p> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=grpc-service-companions-7>gRPC Service Companions<a href=#grpc-service-companions-7 class=hash-link aria-label="Direct link to gRPC Service Companions" title="Direct link to gRPC Service Companions" translate=no></a></h3> |
| <p>When a schema contains services and the compiler is run with <code>--grpc</code>, Kotlin |
| generation emits one <code><ServiceName>GrpcKt.kt</code> file per service next to the model |
| types. The file contains a grpc-kotlin coroutine companion object, not Java |
| <code>*Grpc.java</code> source.</p> |
| <div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>object</span><span class="token plain"> AddressBookServiceGrpcKt </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>val</span><span class="token plain"> SERVICE_NAME</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> String </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token string-literal singleline string" style=color:#e3116c>"addressbook.AddressBookService"</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation builtin">@JvmStatic</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>val</span><span class="token plain"> serviceDescriptor</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> io</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">grpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">ServiceDescriptor</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>get</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> serviceDescriptorValue</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation builtin">@JvmStatic</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>val</span><span class="token plain"> lookupMethod</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> io</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">grpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">MethodDescriptor</span><span class="token operator" style=color:#393A34><</span><span class="token plain">Person</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> AddressBook</span><span class="token operator" style=color:#393A34>></span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>get</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> lookupMethodValue</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>abstract</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>AddressBookServiceCoroutineImplBase</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> coroutineContext</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> kotlin</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">coroutines</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">CoroutineContext </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> kotlin</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">coroutines</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">EmptyCoroutineContext</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> io</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">grpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">kotlin</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>AbstractCoroutineServerImpl</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">coroutineContext</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>open</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>suspend</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>fun</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>lookup</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">request</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> Person</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> AddressBook </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>throw</span><span class="token plain"> io</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">grpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>StatusException</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> io</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">grpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Status</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">UNIMPLEMENTED</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>withDescription</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token string-literal singleline string" style=color:#e3116c>"Method addressbook.AddressBookService/Lookup is unimplemented"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> AddressBookServiceCoroutineStub </span><span class="token annotation builtin">@JvmOverloads</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>constructor</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> channel</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> io</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">grpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Channel</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> callOptions</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> io</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">grpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">CallOptions </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> io</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">grpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">CallOptions</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">DEFAULT</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> io</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">grpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">kotlin</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">AbstractCoroutineStub</span><span class="token operator" style=color:#393A34><</span><span class="token plain">AddressBookServiceCoroutineStub</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> channel</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> callOptions</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>suspend</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>fun</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>lookup</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> request</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> Person</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> headers</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> io</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">grpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Metadata </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> io</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">grpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>Metadata</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> AddressBook </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> io</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">grpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">kotlin</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">ClientCalls</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>unaryRpc</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> channel</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> lookupMethod</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> request</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> callOptions</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> headers</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>Streaming RPCs use <code>kotlinx.coroutines.flow.Flow</code>:</p> |
| <table><thead><tr><th>IDL shape<th>Server method<th>Client method<tbody><tr><td><code>rpc A (Req) returns (Res)</code><td><code>suspend fun a(request: Req): Res</code><td><code>suspend fun a(request: Req): Res</code><tr><td><code>rpc A (Req) returns (stream Res)</code><td><code>fun a(request: Req): Flow<Res></code><td><code>fun a(request: Req): Flow<Res></code><tr><td><code>rpc A (stream Req) returns (Res)</code><td><code>suspend fun a(requests: Flow<Req>): Res</code><td><code>suspend fun a(requests: Flow<Req>): Res</code><tr><td><code>rpc A (stream Req) returns (stream Res)</code><td><code>fun a(requests: Flow<Req>): Flow<Res></code><td><code>fun a(requests: Flow<Req>): Flow<Res></code></table> |
| <p>Each method descriptor uses a Fory-backed <code>io.grpc.MethodDescriptor.Marshaller</code> |
| that reuses the generated schema module's <code>ThreadSafeFory</code>. Generated service |
| companions do not call protobuf parsers, do not expose KSP serializer class |
| names, and do not create Fory instances per call.</p> |
| <p>Applications compiling the generated Kotlin service files must provide |
| grpc-java, grpc-kotlin, and <code>kotlinx-coroutines-core</code> dependencies. Fory Kotlin |
| artifacts do not add those gRPC dependencies as hard dependencies.</p> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=scala>Scala<a href=#scala class=hash-link aria-label="Direct link to Scala" title="Direct link to Scala" translate=no></a></h2> |
| <p>The Scala target emits Scala 3 source only. The <code>fory-scala</code> artifact still |
| supports Scala 2.13 and Scala 3, but generated IDL source and macro derivation |
| require Scala 3.</p> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=output-layout-10>Output Layout<a href=#output-layout-10 class=hash-link aria-label="Direct link to Output Layout" title="Direct link to Output Layout" translate=no></a></h3> |
| <p>For <code>package addressbook</code>, Scala output is generated under:</p> |
| <ul> |
| <li class=""><code><scala_out>/addressbook/</code></li> |
| <li class="">Type files: <code>AddressBook.scala</code>, <code>Person.scala</code>, <code>Dog.scala</code>, <code>Cat.scala</code>, <code>Animal.scala</code></li> |
| <li class="">Schema module: <code>AddressbookForyModule.scala</code></li> |
| </ul> |
| <p>For schemas without a Scala package, the schema module name is derived from the |
| source file stem, for example <code>main.fdl</code> generates <code>MainForyModule.scala</code>. |
| Scala import graphs cannot mix default-package schemas with named Scala |
| packages.</p> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=type-generation-10>Type Generation<a href=#type-generation-10 class=hash-link aria-label="Direct link to Type Generation" title="Direct link to Type Generation" translate=no></a></h3> |
| <p>Messages outside compiler-detected construction cycles generate case classes:</p> |
| <div class="language-scala codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-scala codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> </span><span class="token namespace" style=opacity:0.7>org</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>apache</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>fory</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>annotation</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain">ForyField</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ForyStruct</span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> </span><span class="token namespace" style=opacity:0.7>org</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>apache</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>fory</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>scala</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token plain">ForySerializer</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token annotation punctuation" style=color:#393A34>@ForyStruct</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>final</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>case</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> Person</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation punctuation" style=color:#393A34>@ForyField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> name</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">String</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation punctuation" style=color:#393A34>@ForyField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>3</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> email</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> Option</span><span class="token punctuation" style=color:#393A34>[</span><span class="token builtin">String</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation punctuation" style=color:#393A34>@ForyField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>7</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> phones</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> List</span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">Person</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">PhoneNumber</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation punctuation" style=color:#393A34>@ForyField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>8</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> pet</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> Animal</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>derives</span><span class="token plain"> ForySerializer </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> toBytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> Array</span><span class="token punctuation" style=color:#393A34>[</span><span class="token builtin">Byte</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> AddressbookForyModule</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">getFory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">serialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>this</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>object</span><span class="token plain"> Person </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> fromBytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">bytes</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> Array</span><span class="token punctuation" style=color:#393A34>[</span><span class="token builtin">Byte</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> Person </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> AddressbookForyModule</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">getFory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">deserialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">bytes</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">asInstanceOf</span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">Person</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>Messages in circular construction cycles generate normal classes with mutable |
| serialized fields so reads can register the object before reading back-references:</p> |
| <div class="language-scala codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-scala codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> </span><span class="token namespace" style=opacity:0.7>org</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>apache</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>fory</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>annotation</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain">ForyField</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ForyStruct</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> Ref</span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> </span><span class="token namespace" style=opacity:0.7>org</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>apache</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>fory</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>scala</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token plain">ForySerializer</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token annotation punctuation" style=color:#393A34>@ForyStruct</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>final</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> Node</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>derives</span><span class="token plain"> ForySerializer </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation punctuation" style=color:#393A34>@ForyField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>var</span><span class="token plain"> id</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">String</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>""</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation punctuation" style=color:#393A34>@Ref</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation punctuation" style=color:#393A34>@ForyField</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>var</span><span class="token plain"> parent</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> Option</span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">Node</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> None</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>Enums generate Scala 3 enums with stable Fory IDs:</p> |
| <div class="language-scala codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-scala codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> </span><span class="token namespace" style=opacity:0.7>org</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>apache</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>fory</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>annotation</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token plain">ForyEnumId</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>enum</span><span class="token plain"> PhoneType </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation punctuation" style=color:#393A34>@ForyEnumId</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>0</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>case</span><span class="token plain"> Mobile</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation punctuation" style=color:#393A34>@ForyEnumId</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>case</span><span class="token plain"> Home</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation punctuation" style=color:#393A34>@ForyEnumId</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>case</span><span class="token plain"> Work</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>Unions generate Scala 3 ADT enums. <code>Unknown(UnknownCase)</code> is the Fory-provided |
| forward-compatibility carrier marked with <code>@ForyUnknownCase</code>. It is omitted |
| from the schema case table because the marker only selects the carrier and does |
| not add a schema entry. Schema-defined cases use non-negative <code>@ForyCase</code> IDs. |
| A typed union must have at least one |
| non-<code>Unknown</code> case.</p> |
| <div class="language-scala codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-scala codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>package</span><span class="token plain"> </span><span class="token namespace" style=opacity:0.7>addressbook</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> </span><span class="token namespace" style=opacity:0.7>org</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>apache</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>fory</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>annotation</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain">ForyCase</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ForyUnion</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ForyUnknownCase</span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> </span><span class="token namespace" style=opacity:0.7>org</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>apache</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>fory</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>scala</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token plain">ForySerializer</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> </span><span class="token namespace" style=opacity:0.7>org</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>apache</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>fory</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token plain">`</span><span class="token keyword" style=color:#00009f>type</span><span class="token plain">`</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">union</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">UnknownCase</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token annotation punctuation" style=color:#393A34>@ForyUnion</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>enum</span><span class="token plain"> Animal </span><span class="token keyword" style=color:#00009f>derives</span><span class="token plain"> ForySerializer </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation punctuation" style=color:#393A34>@ForyUnknownCase</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>case</span><span class="token plain"> Unknown</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">value</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> UnknownCase</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation punctuation" style=color:#393A34>@ForyCase</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>0</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>case</span><span class="token plain"> Dog</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">value</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> _root_</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">addressbook</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Dog</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token annotation punctuation" style=color:#393A34>@ForyCase</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>case</span><span class="token plain"> Cat</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">value</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> _root_</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">addressbook</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Cat</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>Packaged Scala output keeps the schema case name and qualifies the payload type |
| when both have the same simple name. If a target output mode cannot express a |
| legal qualifier for a conflict, the compiler appends <code>Case</code> to the generated |
| case name.</p> |
| <p><code>optional T</code> fields generate <code>Option[T]</code>. Top-level message references use |
| <code>@Ref</code> on the field or constructor parameter. Nested element/value references |
| use type-use annotations such as <code>List[Node @Ref]</code>.</p> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=schema-module-2>Schema Module<a href=#schema-module-2 class=hash-link aria-label="Direct link to Schema Module" title="Direct link to Schema Module" translate=no></a></h3> |
| <p>Generated schema modules register schema serializers, enums, structs, and |
| unions. The package-owned helper Fory instance uses |
| <code>ForyScala.builder().withXlang(true)</code> with the schema module installed, so |
| message <code>toBytes</code>/<code>fromBytes</code> helpers work without caller-managed Fory setup:</p> |
| <div class="language-scala codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-scala codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>object</span><span class="token plain"> AddressbookForyModule </span><span class="token keyword" style=color:#00009f>extends</span><span class="token plain"> org</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">apache</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">ForyModule </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>private</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>lazy</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>val</span><span class="token plain"> fory</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> ThreadSafeFory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> ForyScala</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">builder</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">withXlang</span><span class="token punctuation" style=color:#393A34>(</span><span class="token boolean" style=color:#36acaa>true</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">withRefTracking</span><span class="token punctuation" style=color:#393A34>(</span><span class="token boolean" style=color:#36acaa>true</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">withModule</span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>this</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">buildThreadSafeFory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>private</span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">addressbook</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> getFory</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> ThreadSafeFory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>override</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> install</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> Fory</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">Unit</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> ScalaSerializers</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">registerEnum</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> classOf</span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">Person</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">PhoneType</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>101L</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> ForySerializer</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> classOf</span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">Person</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">PhoneNumber</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>102L</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> ForySerializer</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> classOf</span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">Person</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>100L</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> ForySerializer</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> classOf</span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">Animal</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>106L</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=grpc-service-companions-8>gRPC Service Companions<a href=#grpc-service-companions-8 class=hash-link aria-label="Direct link to gRPC Service Companions" title="Direct link to gRPC Service Companions" translate=no></a></h3> |
| <p>When a schema contains services and the compiler is run with <code>--grpc</code>, Scala |
| generation emits one <code><ServiceName>Grpc.scala</code> companion per local service |
| definition. The companion lives in the same Scala package as the generated |
| models and schema module.</p> |
| <p>For a service such as:</p> |
| <div class="language-protobuf codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-protobuf codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>service</span><span class="token plain"> </span><span class="token class-name">AddressBookService</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>rpc</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>Lookup</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Person</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>returns</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">AddressBook</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>rpc</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>Watch</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Person</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>returns</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>stream</span><span class="token plain"> </span><span class="token class-name">AddressBook</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>rpc</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>Upload</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>stream</span><span class="token plain"> </span><span class="token class-name">Person</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>returns</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">AddressBook</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>rpc</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>Chat</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>stream</span><span class="token plain"> </span><span class="token class-name">Person</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>returns</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>stream</span><span class="token plain"> </span><span class="token class-name">AddressBook</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>the generated companion contains:</p> |
| <ul> |
| <li class=""><code>SERVICE_NAME</code> and grpc-java method descriptors</li> |
| <li class=""><code>AddressBookServiceImplBase</code> for server implementations</li> |
| <li class=""><code>AddressBookServiceClient</code> for client calls</li> |
| <li class="">Fory-backed grpc-java marshallers for request and response payloads</li> |
| </ul> |
| <p>The generated Scala client keeps grpc-java available per method while adding |
| Scala-friendly convenience methods for the shapes where a direct Scala handle |
| can preserve the needed lifecycle controls:</p> |
| <table><thead><tr><th>RPC shape<th>Scala convenience method<th>grpc-java-style method<tbody><tr><td><code>rpc Lookup (Person) returns (AddressBook)</code><td><code>lookup(request): RpcFuture[Resp]</code><td>async observer, blocking, and <code>ListenableFuture</code><tr><td><code>rpc Watch (Person) returns (stream AddressBook)</code><td><code>watch(request): RpcIterator[Resp]</code><td>async observer and blocking iterator<tr><td><code>rpc Upload (stream Person) returns (AddressBook)</code><td>None<td>request <code>StreamObserver</code><tr><td><code>rpc Chat (stream Person) returns (stream AddressBook)</code><td>None<td>request and response <code>StreamObserver</code></table> |
| <p>Unary client convenience methods return <code>org.apache.fory.scala.rpc.RpcFuture</code>:</p> |
| <div class="language-scala codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-scala codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>val</span><span class="token plain"> client </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> AddressBookServiceGrpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">newClient</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">channel</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>val</span><span class="token plain"> call </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> client</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">lookup</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">person</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">call</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">asFuture</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">foreach</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">handleAddressBook</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">scala</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">concurrent</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">ExecutionContext</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">global</span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <p>Server-streaming client convenience methods return |
| <code>org.apache.fory.scala.rpc.RpcIterator</code>:</p> |
| <div class="language-scala codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-scala codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>val</span><span class="token plain"> stream </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> client</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">watch</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">person</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>try</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>while</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">stream</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">hasNext</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> handleAddressBook</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">stream</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">next</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>finally</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> stream</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">close</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div> |
| <p>Close or cancel the <code>RpcIterator</code> when the client stops before consuming the |
| whole stream. The generated adapter cancels the underlying gRPC call so the |
| server is not left writing a response stream the client no longer reads.</p> |
| <p>Client-streaming and bidirectional methods use grpc-java <code>StreamObserver</code> APIs:</p> |
| <div class="language-scala codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-scala codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>val</span><span class="token plain"> requestStream </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> client</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">upload</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>new</span><span class="token plain"> io</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">grpc</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">stub</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">StreamObserver</span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">AddressBook</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>override</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> onNext</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">value</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> AddressBook</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">Unit</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> handleAddressBook</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">value</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>override</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> onError</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">t</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> Throwable</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">Unit</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> handleError</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">t</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>override</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> onCompleted</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">Unit</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">requestStream</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">onNext</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">person</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">requestStream</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">onCompleted</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <p>Server implementations mirror grpc-java. Unary methods can override the direct |
| request-to-response method generated by Scala, but streaming methods override |
| observer-based methods and must call <code>onNext</code>, <code>onError</code>, and <code>onCompleted</code> |
| according to grpc-java lifecycle rules.</p> |
| <p>Applications compiling generated Scala gRPC companions must provide grpc-java |
| dependencies such as <code>grpc-api</code>, <code>grpc-stub</code>, and a transport like |
| <code>grpc-netty-shaded</code>. The <code>fory-scala</code> artifact does not add grpc-java as a hard |
| dependency.</p> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=cross-language-notes>Cross-Language Notes<a href=#cross-language-notes class=hash-link aria-label="Direct link to Cross-Language Notes" title="Direct link to Cross-Language Notes" translate=no></a></h2> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=type-id-behavior>Type ID Behavior<a href=#type-id-behavior class=hash-link aria-label="Direct link to Type ID Behavior" title="Direct link to Type ID Behavior" translate=no></a></h3> |
| <ul> |
| <li class="">Explicit <code>[id=...]</code> values are used directly by generated module installation or registration helpers.</li> |
| <li class="">When type IDs are omitted, generated code uses computed numeric IDs (see <code>auto_id.*</code> outputs).</li> |
| <li class="">If <code>option enable_auto_type_id = false;</code> is set, generated module installation or registration helpers use name-based APIs instead of numeric IDs.</li> |
| </ul> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=nested-type-shape>Nested Type Shape<a href=#nested-type-shape class=hash-link aria-label="Direct link to Nested Type Shape" title="Direct link to Nested Type Shape" translate=no></a></h3> |
| <table><thead><tr><th>Language<th>Nested type form<tbody><tr><td>Java<td><code>Person.PhoneNumber</code><tr><td>Python<td><code>Person.PhoneNumber</code><tr><td>Rust<td><code>person::PhoneNumber</code><tr><td>C++<td><code>Person::PhoneNumber</code><tr><td>Go<td><code>Person_PhoneNumber</code> (default)<tr><td>C#<td><code>Person.PhoneNumber</code><tr><td>JavaScript/TypeScript<td><code>Person.PhoneNumber</code><tr><td>Swift<td><code>Person.PhoneNumber</code><tr><td>Dart<td><code>Person_PhoneNumber</code><tr><td>Kotlin<td><code>PersonPhoneNumber</code><tr><td>Scala<td><code>Person.PhoneNumber</code></table> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=byte-helper-naming>Byte Helper Naming<a href=#byte-helper-naming class=hash-link aria-label="Direct link to Byte Helper Naming" title="Direct link to Byte Helper Naming" translate=no></a></h3> |
| <table><thead><tr><th>Language<th>Helpers<tbody><tr><td>Java<td><code>toBytes</code> / <code>fromBytes</code><tr><td>Kotlin<td><code>toBytes</code> / <code>fromBytes</code><tr><td>Scala<td><code>toBytes</code> / <code>fromBytes</code><tr><td>Python<td><code>to_bytes</code> / <code>from_bytes</code><tr><td>Rust<td><code>to_bytes</code> / <code>from_bytes</code><tr><td>C++<td><code>to_bytes</code> / <code>from_bytes</code><tr><td>Go<td><code>ToBytes</code> / <code>FromBytes</code><tr><td>C#<td><code>ToBytes</code> / <code>FromBytes</code><tr><td>JavaScript/TypeScript<td>(via <code>fory.serialize()</code>)<tr><td>Swift<td><code>toBytes</code> / <code>fromBytes</code><tr><td>Dart<td>(via <code>fory.serialize()</code>)</table></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_WFHX"><a href=https://github.com/apache/fory-site/tree/main/docs/compiler/generated-code.md target=_blank rel="noopener noreferrer" class=theme-edit-this-page><svg fill=currentColor height=20 width=20 viewBox="0 0 40 40" class=iconEdit_Z9Sw aria-hidden=true><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"/></g></svg>Edit this page</a></div><div class="col lastUpdated_JAkA"></div></div></footer></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href=/docs/compiler/compiler_guide><div class=pagination-nav__sublabel>Previous</div><div class=pagination-nav__label>Compiler Guide</div></a><a class="pagination-nav__link pagination-nav__link--next" href=/docs/compiler/flatbuffers_idl><div class=pagination-nav__sublabel>Next</div><div class=pagination-nav__label>FlatBuffers IDL Support</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href=#reference-schemas class="table-of-contents__link toc-highlight">Reference Schemas</a><ul><li><a href=#addressbookfdl-excerpt class="table-of-contents__link toc-highlight"><code>addressbook.fdl</code> (excerpt)</a><li><a href=#auto_idfdl-excerpt class="table-of-contents__link toc-highlight"><code>auto_id.fdl</code> (excerpt)</a></ul><li><a href=#java class="table-of-contents__link toc-highlight">Java</a><ul><li><a href=#output-layout class="table-of-contents__link toc-highlight">Output Layout</a><li><a href=#type-generation class="table-of-contents__link toc-highlight">Type Generation</a><li><a href=#schema-module class="table-of-contents__link toc-highlight">Schema Module</a><li><a href=#usage class="table-of-contents__link toc-highlight">Usage</a><li><a href=#grpc-service-companions class="table-of-contents__link toc-highlight">gRPC Service Companions</a></ul><li><a href=#python class="table-of-contents__link toc-highlight">Python</a><ul><li><a href=#output-layout-1 class="table-of-contents__link toc-highlight">Output Layout</a><li><a href=#type-generation-1 class="table-of-contents__link toc-highlight">Type Generation</a><li><a href=#registration class="table-of-contents__link toc-highlight">Registration</a><li><a href=#usage-1 class="table-of-contents__link toc-highlight">Usage</a><li><a href=#grpc-service-companions-1 class="table-of-contents__link toc-highlight">gRPC Service Companions</a></ul><li><a href=#rust class="table-of-contents__link toc-highlight">Rust</a><ul><li><a href=#output-layout-2 class="table-of-contents__link toc-highlight">Output Layout</a><li><a href=#type-generation-2 class="table-of-contents__link toc-highlight">Type Generation</a><li><a href=#registration-1 class="table-of-contents__link toc-highlight">Registration</a><li><a href=#usage-2 class="table-of-contents__link toc-highlight">Usage</a><li><a href=#grpc-service-companions-2 class="table-of-contents__link toc-highlight">gRPC Service Companions</a></ul><li><a href=#c class="table-of-contents__link toc-highlight">C++</a><ul><li><a href=#output-layout-3 class="table-of-contents__link toc-highlight">Output Layout</a><li><a href=#type-generation-3 class="table-of-contents__link toc-highlight">Type Generation</a><li><a href=#registration-2 class="table-of-contents__link toc-highlight">Registration</a><li><a href=#usage-3 class="table-of-contents__link toc-highlight">Usage</a></ul><li><a href=#go class="table-of-contents__link toc-highlight">Go</a><ul><li><a href=#output-layout-4 class="table-of-contents__link toc-highlight">Output Layout</a><li><a href=#type-generation-4 class="table-of-contents__link toc-highlight">Type Generation</a><li><a href=#registration-3 class="table-of-contents__link toc-highlight">Registration</a><li><a href=#usage-4 class="table-of-contents__link toc-highlight">Usage</a><li><a href=#grpc-service-companions-3 class="table-of-contents__link toc-highlight">gRPC Service Companions</a></ul><li><a href=#c-1 class="table-of-contents__link toc-highlight">C#</a><ul><li><a href=#output-layout-5 class="table-of-contents__link toc-highlight">Output Layout</a><li><a href=#type-generation-5 class="table-of-contents__link toc-highlight">Type Generation</a><li><a href=#module-installation class="table-of-contents__link toc-highlight">Module Installation</a><li><a href=#grpc-service-companions-4 class="table-of-contents__link toc-highlight">gRPC Service Companions</a></ul><li><a href=#javascripttypescript class="table-of-contents__link toc-highlight">JavaScript/TypeScript</a><ul><li><a href=#output-layout-6 class="table-of-contents__link toc-highlight">Output Layout</a><li><a href=#type-generation-6 class="table-of-contents__link toc-highlight">Type Generation</a><li><a href=#schema-helpers class="table-of-contents__link toc-highlight">Schema Helpers</a><li><a href=#grpc-service-companions-5 class="table-of-contents__link toc-highlight">gRPC Service Companions</a></ul><li><a href=#swift class="table-of-contents__link toc-highlight">Swift</a><ul><li><a href=#output-layout-7 class="table-of-contents__link toc-highlight">Output Layout</a><li><a href=#type-generation-7 class="table-of-contents__link toc-highlight">Type Generation</a><li><a href=#module-installation-1 class="table-of-contents__link toc-highlight">Module Installation</a></ul><li><a href=#dart class="table-of-contents__link toc-highlight">Dart</a><ul><li><a href=#output-layout-8 class="table-of-contents__link toc-highlight">Output Layout</a><li><a href=#type-generation-8 class="table-of-contents__link toc-highlight">Type Generation</a><li><a href=#module-installation-2 class="table-of-contents__link toc-highlight">Module Installation</a><li><a href=#usage-5 class="table-of-contents__link toc-highlight">Usage</a><li><a href=#grpc-service-companions-6 class="table-of-contents__link toc-highlight">gRPC Service Companions</a></ul><li><a href=#kotlin class="table-of-contents__link toc-highlight">Kotlin</a><ul><li><a href=#output-layout-9 class="table-of-contents__link toc-highlight">Output Layout</a><li><a href=#type-generation-9 class="table-of-contents__link toc-highlight">Type Generation</a><li><a href=#schema-module-1 class="table-of-contents__link toc-highlight">Schema Module</a><li><a href=#grpc-service-companions-7 class="table-of-contents__link toc-highlight">gRPC Service Companions</a></ul><li><a href=#scala class="table-of-contents__link toc-highlight">Scala</a><ul><li><a href=#output-layout-10 class="table-of-contents__link toc-highlight">Output Layout</a><li><a href=#type-generation-10 class="table-of-contents__link toc-highlight">Type Generation</a><li><a href=#schema-module-2 class="table-of-contents__link toc-highlight">Schema Module</a><li><a href=#grpc-service-companions-8 class="table-of-contents__link toc-highlight">gRPC Service Companions</a></ul><li><a href=#cross-language-notes class="table-of-contents__link toc-highlight">Cross-Language Notes</a><ul><li><a href=#type-id-behavior class="table-of-contents__link toc-highlight">Type ID Behavior</a><li><a href=#nested-type-shape class="table-of-contents__link toc-highlight">Nested Type Shape</a><li><a href=#byte-helper-naming class="table-of-contents__link toc-highlight">Byte Helper Naming</a></ul></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class=footer__title>Community</div><ul class="footer__items clean-list"><li class=footer__item><a href=https://lists.apache.org/list.html?dev@fory.apache.org target=_blank rel="noopener noreferrer" class=footer__link-item>Mailing list<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a><li class=footer__item><a href=https://join.slack.com/t/fory-project/shared_invite/zt-1u8soj4qc-ieYEu7ciHOqA2mo47llS8A target=_blank rel="noopener noreferrer" class=footer__link-item>Slack<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a><li class=footer__item><a href=https://twitter.com/ApacheFory target=_blank rel="noopener noreferrer" class=footer__link-item>Twitter<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a></ul></div><div class="theme-layout-footer-column col footer__col"><div class=footer__title>Docs</div><ul class="footer__items clean-list"><li class=footer__item><a class=footer__link-item href=/docs/start/install>Install</a><li class=footer__item><a class=footer__link-item href=/docs/start/usage>Usage</a><li class=footer__item><a class=footer__link-item href=/docs/introduction/benchmark>Benchmark</a></ul></div><div class="theme-layout-footer-column col footer__col"><div class=footer__title>Repositories</div><ul class="footer__items clean-list"><li class=footer__item><a href=https://github.com/apache/fory target=_blank rel="noopener noreferrer" class=footer__link-item>Apache Fory™<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a><li class=footer__item><a href=https://github.com/apache/fory-site target=_blank rel="noopener noreferrer" class=footer__link-item>Website<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a></ul></div></div><div class="footer__bottom text--center"><div class=margin-bottom--sm><a href=https://apache.org/ rel="noopener noreferrer" class=footerLogoLink_BH7S><img src=/img/asf_logo.svg alt="ASF Logo" class="footer__logo themedComponent_mlkZ themedComponent--light_NVdE" width=200 /><img src=/img/asf_logo.svg alt="ASF Logo" class="footer__logo themedComponent_mlkZ themedComponent--dark_xIcU" width=200 /></a></div><div class=footer__copyright><div> |
| <p> |
| Copyright © 2026 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. <br/> |
| Apache Fory, Fory, Apache, the Apache Logo and the Apache Fory logo are either registered trademarks or trademarks of the Apache Software Foundation in the United States and/or other countries. |
| </p> |
| </div></div></div></div></footer></div></body> |