blob: 6b3bd92040cb9ffa73471a820abbba6e484488e7 [file]
<!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>&lt;</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>&lt;</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>&lt;</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>&lt;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>&lt;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>&lt;</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>&lt;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>&lt;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>&lt;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>&lt;rust_out>/addressbook_service.rs</code></li>
<li class=""><code>&lt;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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;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>&lt;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>&lt;</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>&lt;</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>&lt;</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>&lt;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>&lt;</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>&lt;</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>&lt;</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&lt;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&lt;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&lt;Res> responseStream, ...)</code><td><code>AsyncServerStreamingCall&lt;Res> A(...)</code><tr><td><code>rpc A (stream Req) returns (Res)</code><td><code>Task&lt;Res> A(IAsyncStreamReader&lt;Req> requestStream, ...)</code><td><code>AsyncClientStreamingCall&lt;Req, Res> A(...)</code><tr><td><code>rpc A (stream Req) returns (stream Res)</code><td><code>Task A(IAsyncStreamReader&lt;Req> requestStream, IServerStreamWriter&lt;Res> ...)</code><td><code>AsyncDuplexStreamingCall&lt;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>&lt;javascript_out>/addressbook.ts</code></li>
</ul>
<p>When the schema contains services, JavaScript can also emit service companions:</p>
<ul>
<li class=""><code>&lt;javascript_out>/addressbook_grpc.ts</code> with <code>--grpc</code></li>
<li class=""><code>&lt;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>&lt;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>&lt;</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>&lt;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>&lt;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>&lt;dart_out>/package/package.dart</code></li>
<li class=""><code>&lt;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>&lt;</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>&lt;</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&lt;T></code> fields generate ordered collection carriers and use the Fory list
protocol. <code>array&lt;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&lt;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&lt;int32></code><td><code>List&lt;int></code><td>List protocol, varint element encoding<tr><td><code>list&lt;fixed int32></code><td><code>List&lt;int></code><td>List protocol, fixed-width element segment<tr><td><code>array&lt;bool></code><td><code>BoolList</code><td>One byte per bool<tr><td><code>array&lt;int8></code><td><code>Int8List</code><td>Dense signed bytes<tr><td><code>array&lt;int16></code><td><code>Int16List</code><td>Dense little-endian int16<tr><td><code>array&lt;int32></code><td><code>Int32List</code><td>Dense little-endian int32<tr><td><code>array&lt;int64></code><td><code>Int64List</code><td>Dense little-endian int64<tr><td><code>array&lt;uint8></code><td><code>Uint8List</code><td>Dense unsigned bytes<tr><td><code>array&lt;uint16></code><td><code>Uint16List</code><td>Dense little-endian uint16<tr><td><code>array&lt;uint32></code><td><code>Uint32List</code><td>Dense little-endian uint32<tr><td><code>array&lt;uint64></code><td><code>Uint64List</code><td>Dense little-endian uint64<tr><td><code>array&lt;float16></code><td><code>Float16List</code><td>Dense binary16 storage<tr><td><code>array&lt;bfloat16></code><td><code>Bfloat16List</code><td>Dense bfloat16 storage<tr><td><code>array&lt;float32></code><td><code>Float32List</code><td>Dense little-endian float32<tr><td><code>array&lt;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&lt;bool></code> remains the generated and handwritten carrier
for <code>list&lt;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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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>&lt;</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&lt;R></code> (client-streaming
adapts the streaming call with <code>.single</code>); a streaming-response method returns
<code>ResponseStream&lt;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&lt;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>&lt;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>&lt;</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&lt;float16></code> and
<code>array&lt;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&lt;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>&lt;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>&lt;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>&lt;</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>&lt;</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&lt;Res></code><td><code>fun a(request: Req): Flow&lt;Res></code><tr><td><code>rpc A (stream Req) returns (Res)</code><td><code>suspend fun a(requests: Flow&lt;Req>): Res</code><td><code>suspend fun a(requests: Flow&lt;Req>): Res</code><tr><td><code>rpc A (stream Req) returns (stream Res)</code><td><code>fun a(requests: Flow&lt;Req>): Flow&lt;Res></code><td><code>fun a(requests: Flow&lt;Req>): Flow&lt;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>&lt;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>&lt;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>