blob: a7730faffc5ab9a16317a2af6311533b58293dd1 [file]
<!doctype html><html lang=en-US dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-1.6.0 docs-doc-page docs-doc-id-row-format/rust" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.1"><title data-rh=true>Rust Standard Row Format | 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/row-format/rust /><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.6.0 /><meta data-rh=true name=docusaurus_tag content=docs-default-1.6.0 /><meta data-rh=true name=docsearch:version content=1.6.0 /><meta data-rh=true name=docsearch:docusaurus_tag content=docs-default-1.6.0 /><meta data-rh=true property=og:title content="Rust Standard Row Format | Apache Fory™"/><meta data-rh=true name=description content="Apache Fory™ Rust implements the Standard Row Format used by Java, C++, and Python. It provides zero-copy borrowed views and random field access without reconstructing the complete value."/><meta data-rh=true property=og:description content="Apache Fory™ Rust implements the Standard Row Format used by Java, C++, and Python. It provides zero-copy borrowed views and random field access without reconstructing the complete value."/><link data-rh=true rel=icon href=/img/favicon.ico /><link data-rh=true rel=canonical href=https://fory.apache.org/docs/row-format/rust /><link data-rh=true rel=alternate href=https://fory.apache.org/docs/row-format/rust hreflang=en-US /><link data-rh=true rel=alternate href=https://fory.apache.org/zh-CN/docs/row-format/rust hreflang=zh-CN /><link data-rh=true rel=alternate href=https://fory.apache.org/docs/row-format/rust 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/row-format/rust","name":"Rust Standard Row Format","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(){var i=["0.17","0.16","0.15","0.14","0.13","0.12","0.11","0.10"];if(0!==i.length){var t=window.location.pathname.split("/").filter(Boolean),a=/^[a-z]{2}-[A-Z]{2}$/.test(t[0])?t[0]:null,e=+!!a;if(!("docs"!==t[e]||0>i.indexOf(t[e+1]))){var o=["/archive"];a&&o.push(a),o.push.apply(o,t.slice(e));var n=window.location.pathname.endsWith("/")?"/":"";window.location.replace(o.join("/")+n+window.location.search+window.location.hash)}}}(),function(){var i=window.location.pathname.split("/").filter(Boolean),t="docs"===i[0]?0:/^[a-z]{2}-[A-Z]{2}$/.test(i[0])&&"docs"===i[1]?1:-1;if(!(t<0)){var a=t+1,e=i[a];if(!/^[0-9]+[.][0-9]+(?:[.][0-9]+)?$/.test(e)){"next"===e&&a++;var o=i.slice(a).join("/"),n=o.split("/"),r=2===n.length&&"guide"===n[0]?n[1]:null,s=r&&["cpp","csharp","dart","go","java","javascript","kotlin","python","rust","scala","swift"].indexOf(r)>=0?"object-serialization/"+r:({"introduction/overview":"introduction","introduction/benchmark":"benchmarks","start/install":"start","start/usage":"start","guide/xlang":"object-serialization/xlang","guide/xlang/getting_started":"object-serialization/xlang","guide/xlang/serialization":"object-serialization/xlang","guide/java/json_support":"json","guide/rust/external_types":"object-serialization/rust/external-types","guide/dart/external_types":"object-serialization/dart/external-types","guide/swift/external_types":"object-serialization/swift/external-types","guide/csharp/external_types":"object-serialization/csharp/external-types","guide/csharp/basic_serialization":"object-serialization/csharp/basic-serialization","guide/dart/inheritance":"object-serialization/dart/inheritance","benchmarks/rust":"benchmarks/object-serialization/xlang/rust","compiler/compiler_guide":"compiler/getting-started","community/development":"development"})[o];if(s){var l="/"+i.slice(0,a).join("/");window.location.replace(l+"/"+s+"/"+window.location.search+window.location.hash)}}}}(),function(){var i=window.location.pathname,t=i.split("/").filter(Boolean),a="docs"===t[0]?0:/^[a-z]{2}-[A-Z]{2}$/.test(t[0])&&"docs"===t[1]?1:-1;if(!(a<0)){var e=a+1,o=t[e];if(("next"===o||/^[0-9]+[.][0-9]+(?:[.][0-9]+)?$/.test(o))&&e++,!("docs"!==t[e]||0>["guide","introduction","start"].indexOf(t[e+1]))){t.splice(e,1);var n="/"+t.join("/");i.endsWith("/")&&(n+="/"),window.location.replace(n+window.location.search+window.location.hash)}}}()</script><link rel=stylesheet href=/assets/css/styles.eba6f8f8.css /><script src=/assets/js/runtime~main.8f499156.js defer></script><script src=/assets/js/main.b5599e9a.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/>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/row-format/rust>1.6</a><ul class=dropdown__menu><li><a class=dropdown__link href=/docs/next/row-format/rust>dev</a><li><a aria-current=page class="dropdown__link dropdown__link--active" href=/docs/row-format/rust>1.6</a><li><a class=dropdown__link href=/docs/1.5/introduction/overview>1.5</a><li><a class=dropdown__link href=/docs/1.4/introduction/overview>1.4</a><li><a class=dropdown__link href=/docs/1.3/introduction/overview>1.3</a><li><a class=dropdown__link href=/docs/1.2/introduction/overview>1.2</a><li><a class=dropdown__link href=/docs/1.1/introduction/overview>1.1</a><li><a class=dropdown__link href=/docs/1.0/introduction/overview>1.0</a><li><a href=https://fory.apache.org/archive/docs/0.17/introduction/overview/ target=_blank rel="noopener noreferrer" class=dropdown__link>More versions<svg width=12 height=12 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></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/row-format/rust target=_self rel="noopener noreferrer" class="dropdown__link dropdown__link--active" lang=en-US>English</a><li><a href=/zh-CN/docs/row-format/rust 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 menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false href=/docs/introduction/><span title=Introduction class=categoryLinkLabel_W154>Introduction</span></a></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false href=/docs/start/><span title="Getting Started" class=categoryLinkLabel_W154>Getting Started</span></a></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false href=/docs/benchmarks/><span title=Benchmarks class=categoryLinkLabel_W154>Benchmarks</span></a></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false href=/docs/object-serialization/><span title="Object Serialization" class=categoryLinkLabel_W154>Object Serialization</span></a></div><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/row-format/><span title="Row Format" class=categoryLinkLabel_W154>Row Format</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/row-format/><span title=Introduction class=linkLabel_WmDU>Introduction</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/row-format/java><span title="Java Row Format" class=linkLabel_WmDU>Java Row Format</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/row-format/python><span title="Python Row Format" class=linkLabel_WmDU>Python Row Format</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/row-format/cpp><span title="C++ Row Format" class=linkLabel_WmDU>C++ Row Format</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/row-format/rust><span title="Rust Standard Row Format" class=linkLabel_WmDU>Rust Standard Row Format</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/row-format/troubleshooting><span title=Troubleshooting class=linkLabel_WmDU>Troubleshooting</span></a></ul><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false href=/docs/json/><span title="Fory JSON" class=categoryLinkLabel_W154>Fory JSON</span></a></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false href=/docs/compiler/><span title="Fory IDL & Compiler" class=categoryLinkLabel_W154>Fory IDL & Compiler</span></a></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false href=/docs/grpc/><span title="Fory gRPC" class=categoryLinkLabel_W154>Fory gRPC</span></a></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false href=/docs/development/><span title=Development class=categoryLinkLabel_W154>Development</span></a></div></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>Row Format</span><li class="breadcrumbs__item breadcrumbs__item--active"><span class=breadcrumbs__link>Rust Standard Row Format</span></ul></nav><span class="theme-doc-version-badge badge badge--secondary">Version: 1.6</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>Rust Standard Row Format</h1></header><p>Apache Fory™ Rust implements the Standard Row Format used by Java, C++, and Python. It provides zero-copy borrowed views and random field access without reconstructing the complete value.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=overview>Overview<a href=#overview class=hash-link aria-label="Direct link to Overview" title="Direct link to Overview" translate=no></a></h2>
<p>Use Row Format when readers need selected fields or collection elements rather than an owned copy of the complete value. The view borrows the input bytes, so the bytes must remain alive while the view is in use.</p>
<p>Row Format is schema-driven: the Rust type supplied to <code>from_row</code> determines the field types and declaration order. Cross-language readers and writers must use the same schema.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=when-to-use-row-format>When to Use Row Format<a href=#when-to-use-row-format class=hash-link aria-label="Direct link to When to Use Row Format" title="Direct link to When to Use Row Format" translate=no></a></h2>
<ul>
<li class="">Analytics workloads with selective field access</li>
<li class="">Large datasets where only a subset of fields is needed</li>
<li class="">Memory-constrained environments</li>
<li class="">High-throughput data pipelines</li>
<li class="">Sharing Standard Row Format bytes with Java, C++, or Python</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=basic-usage>Basic Usage<a href=#basic-usage class=hash-link aria-label="Direct link to Basic Usage" title="Direct link to Basic Usage" translate=no></a></h2>
<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>use</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 punctuation" style=color:#393A34>{</span><span class="token plain">from_row</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> to_row</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token class-name">Error</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token class-name">ForyRow</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token class-name">RowView</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>use</span><span class="token plain"> </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>collections</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>::</span><span class="token class-name">BTreeMap</span><span class="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(ForyRow)]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><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">UserProfile</span><span class="token plain"> </span><span class="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 punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>i64</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> username</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"> email</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token class-name">Option</span><span class="token operator" style=color:#393A34>&lt;</span><span class="token class-name">String</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"> scores</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 keyword" style=color:#00009f>i32</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"> preferences</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token class-name">BTreeMap</span><span class="token operator" style=color:#393A34>&lt;</span><span class="token class-name">String</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token class-name">String</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"> is_active</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>bool</span><span class="token punctuation" style=color:#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>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><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 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>let</span><span class="token plain"> profile </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token class-name">UserProfile</span><span class="token plain"> </span><span class="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 punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>12345</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> username</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>to_string</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"> email</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token class-name">Some</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string" style=color:#e3116c>"alice@example.com"</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>to_string</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"> scores</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token macro property" style=color:#36acaa>vec!</span><span class="token punctuation" style=color:#393A34>[</span><span class="token number" style=color:#36acaa>95</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>87</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>92</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>88</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> preferences</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token class-name">BTreeMap</span><span class="token punctuation" style=color:#393A34>::</span><span class="token function" style=color:#d73a49>from</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#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 string" style=color:#e3116c>"theme"</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>to_string</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>"dark"</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>to_string</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 string" style=color:#e3116c>"language"</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>to_string</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>"en"</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>to_string</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 punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> is_active</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 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"> row_data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>to_row</span><span class="token punctuation" style=color:#393A34>(</span><span class="token operator" style=color:#393A34>&</span><span class="token plain">profile</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"> row </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>from_row</span><span class="token punctuation" style=color:#393A34>::</span><span class="token operator" style=color:#393A34>&lt;</span><span class="token class-name">UserProfile</span><span class="token operator" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token operator" style=color:#393A34>&</span><span class="token plain">row_data</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" style=display:inline-block></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>// Field methods return Result and validate the referenced bytes.</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token macro property" style=color:#36acaa>assert_eq!</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">row</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>id</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><span class="token number" style=color:#36acaa>12345</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token macro property" style=color:#36acaa>assert_eq!</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">row</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>username</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><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 macro property" style=color:#36acaa>assert_eq!</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">row</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>email</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><span class="token class-name">Some</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string" style=color:#e3116c>"alice@example.com"</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 macro property" style=color:#36acaa>assert!</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">row</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>is_active</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 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"> scores </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> row</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>scores</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 macro property" style=color:#36acaa>assert_eq!</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">scores</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>len</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>4</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token macro property" style=color:#36acaa>assert_eq!</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">scores</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 number" style=color:#36acaa>0</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><span class="token number" style=color:#36acaa>95</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token macro property" style=color:#36acaa>assert_eq!</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">scores</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 number" style=color:#36acaa>1</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><span class="token number" style=color:#36acaa>87</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token macro property" style=color:#36acaa>assert_eq!</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> scores</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>iter</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>collect</span><span class="token punctuation" style=color:#393A34>::</span><span class="token operator" style=color:#393A34>&lt;</span><span class="token class-name">Result</span><span class="token operator" style=color:#393A34>&lt;</span><span class="token class-name">Vec</span><span class="token operator" style=color:#393A34>&lt;</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 plain"> _</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 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 number" style=color:#36acaa>95</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>87</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>92</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>88</span><span class="token punctuation" style=color:#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"> preferences </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> row</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>preferences</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 macro property" style=color:#36acaa>assert_eq!</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">preferences</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>len</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>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 macro property" style=color:#36acaa>assert_eq!</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">preferences</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>key</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 operator" style=color:#393A34>?</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"language"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token macro property" style=color:#36acaa>assert_eq!</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">preferences</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 number" style=color:#36acaa>0</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><span class="token string" style=color:#e3116c>"en"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token macro property" style=color:#36acaa>assert_eq!</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">row</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>as_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"> row_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 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><code>to_row</code> accepts Row Format roots: derived structs, supported arrays, and <code>BTreeMap</code> values. Scalar, string, binary, and <code>Option&lt;T></code> values are field or element values rather than standalone roots.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=view-traversal-and-buffer-reuse>View Traversal and Buffer Reuse<a href=#view-traversal-and-buffer-reuse class=hash-link aria-label="Direct link to View Traversal and Buffer Reuse" title="Direct link to View Traversal and Buffer Reuse" translate=no></a></h2>
<p><code>ArrayView::iter</code> and <code>IntoIterator for &ArrayView</code> read elements on demand through the same checked path as <code>get</code>. Each item is a <code>Result</code>, so malformed data is reported when that element is visited.</p>
<p><code>MapView</code> exposes <code>len</code>, <code>is_empty</code>, <code>key(index)</code>, and <code>value(index)</code>. Its <code>keys()</code> and <code>values()</code> array views remain available for independent iteration.
Call <code>to_btree_map()</code> only when an owned lookup structure is more useful than indexed access; it materializes the map from the borrowed key and value views.</p>
<p>Struct, array, and map views are cheap <code>Copy</code> and <code>Clone</code> values. The <code>RowView</code> trait provides <code>as_bytes()</code>, which returns the exact encoded slice bound to the view, and <code>encoded_len()</code>, which returns its length. A nested view returns only its size-delimited child bytes.</p>
<p>Use <code>to_row_into</code> to replace a caller-owned buffer while retaining its capacity:</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>use</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 plain">to_row_into</span><span class="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"> </span><span class="token keyword" style=color:#00009f>mut</span><span class="token plain"> row_data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token class-name">Vec</span><span class="token punctuation" style=color:#393A34>::</span><span class="token function" style=color:#d73a49>with_capacity</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>4096</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#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>to_row_into</span><span class="token punctuation" style=color:#393A34>(</span><span class="token operator" style=color:#393A34>&</span><span class="token macro property" style=color:#36acaa>vec!</span><span class="token punctuation" style=color:#393A34>[</span><span class="token number" style=color:#36acaa>1i32</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><span class="token number" style=color:#36acaa>3</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 keyword" style=color:#00009f>mut</span><span class="token plain"> row_data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>unwrap</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>Repeated calls discard the previous logical contents. If encoding returns an error, the buffer is left empty. Row framing remains the application's responsibility.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=nullability-and-field-order>Nullability and Field Order<a href=#nullability-and-field-order class=hash-link aria-label="Direct link to Nullability and Field Order" title="Direct link to Nullability and Field Order" translate=no></a></h2>
<p><code>Option&lt;T></code> declares a nullable field or array element. <code>None</code> sets the corresponding null bit, and the field method returns <code>None</code> without reading a value body. <code>Some(value)</code> uses the same fixed slot width as <code>T</code>.</p>
<p><code>#[derive(ForyRow)]</code> supports named structs, including generic structs. Fields are encoded in source declaration order. The derive generates a borrowed <code>StructNameRowView</code> type whose visibility matches the source struct. Each generated field method preserves the corresponding field's visibility and returns <code>Result&lt;_, Error></code>.</p>
<p>Changing field order or field types changes the Row Format schema. Coordinate such changes across all producers and consumers.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=supported-types>Supported Types<a href=#supported-types class=hash-link aria-label="Direct link to Supported Types" title="Direct link to Supported Types" translate=no></a></h2>
<table><thead><tr><th>Rust type<th>Standard Row Format encoding<tbody><tr><td><code>bool</code>, <code>i8</code>, <code>i16</code>, <code>i32</code>, <code>i64</code><td>Fixed-width scalar<tr><td><code>f32</code>, <code>f64</code><td>Fixed-width IEEE 754 scalar<tr><td><code>Date</code><td>Fixed-width date32 in epoch days<tr><td><code>Timestamp</code><td>Fixed-width epoch microseconds<tr><td><code>Duration</code><td>Fixed-width microseconds<tr><td><code>String</code>, <code>&str</code><td>Variable-width UTF-8<tr><td><code>Vec&lt;u8></code>, <code>&[u8]</code><td>Variable-width binary<tr><td><code>Vec&lt;T></code>, <code>[T; N]</code> for supported element types<td>Standard array<tr><td><code>BTreeMap&lt;K, V></code><td>Standard map<tr><td>Named structs with <code>#[derive(ForyRow)]</code><td>Nested Standard Row<tr><td><code>Option&lt;T></code><td>Nullable field or array element</table>
<p><code>Float16</code> and <code>Decimal</code> are not supported because the Standard Row Format specification does not define complete interoperable encodings for them.</p>
<p>Fixed arrays require the encoded element count to equal <code>N</code>. <code>BTreeMap</code> keys must implement <code>Ord</code>; map values do not need to implement <code>Ord</code>.</p>
<p><code>Vec&lt;u8></code> is encoded as binary rather than as a Standard Array. Use another supported element type when an array representation is required.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=standard-binary-layout>Standard Binary Layout<a href=#standard-binary-layout class=hash-link aria-label="Direct link to Standard Binary Layout" title="Direct link to Standard Binary Layout" translate=no></a></h2>
<ul>
<li class="">A row starts with an 8-byte-aligned null bitmap followed by one 8-byte slot per field.</li>
<li class="">Fixed-width values are stored little-endian at the low address of their slot. Unused slot bytes are zero.</li>
<li class="">A variable-width slot is the little-endian <code>u64</code> value <code>(relative_offset &lt;&lt; 32) | size</code>. The value body and its zero padding follow the fixed region.</li>
<li class="">An array starts with a <code>u64</code> element count and an 8-byte-aligned null bitmap. Fixed-width elements use contiguous natural-width slots; variable-width elements use 8-byte offset-size slots.</li>
<li class="">A map contains the key-array byte size followed by complete key and value arrays. Nested structs, arrays, and maps are complete child structures.</li>
<li class="">Variable bodies and array slot regions are padded with zeroes to an 8-byte boundary. Offsets are relative to the immediate containing row or array.</li>
</ul>
<p>For the normative layout and size formulas, see the <a class="" href=/docs/specification/row_format_spec>Row Format Specification</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=validation-and-errors>Validation and Errors<a href=#validation-and-errors class=hash-link aria-label="Direct link to Validation and Errors" title="Direct link to Validation and Errors" translate=no></a></h2>
<p><code>from_row</code>, generated field methods, array <code>get</code>/iteration, and map indexed access return <code>Result</code>. They reject truncated fixed regions, invalid counts, out-of-range offsets and sizes, invalid UTF-8, fixed-array length mismatches, and mismatched map key/value counts.</p>
<p>Array access is also bounds-checked:</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>let</span><span class="token plain"> scores </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> row</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>scores</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 macro property" style=color:#36acaa>assert!</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">scores</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 plain">scores</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>len</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 function" style=color:#d73a49>is_err</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=performance-comparison>Performance Comparison<a href=#performance-comparison class=hash-link aria-label="Direct link to Performance Comparison" title="Direct link to Performance Comparison" translate=no></a></h2>
<table><thead><tr><th>Operation<th>Object Format<th>Row Format<tbody><tr><td>Open encoded data<td>Reconstructs an owned value<td>Creates a borrowed view<tr><td>Read one field<td>Accesses the reconstructed object<td>Validates and reads the field directly<tr><td>Collection access<td>Uses an owned collection<td>Uses a borrowed array or map view<tr><td>Suitable for<td>Full object use and graph semantics<td>Selective access and cross-language rows</table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=foryrow-vs-forystruct>ForyRow vs ForyStruct<a href=#foryrow-vs-forystruct class=hash-link aria-label="Direct link to ForyRow vs ForyStruct" title="Direct link to ForyRow vs ForyStruct" translate=no></a></h2>
<table><thead><tr><th>Feature<th><code>#[derive(ForyRow)]</code><th><code>#[derive(ForyStruct)]</code><tbody><tr><td>Read result<td>Borrowed view<td>Owned Rust value<tr><td>Field access<td>Field method returning <code>Result</code><td>Normal struct access<tr><td>Schema order<td>Source declaration order<td>Object-format schema rules<tr><td>Best for<td>Selective access to Standard Row bytes<td>General object serialization</table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=related-topics>Related Topics<a href=#related-topics class=hash-link aria-label="Direct link to Related Topics" title="Direct link to Related Topics" translate=no></a></h2>
<ul>
<li class=""><a class="" href=/docs/object-serialization/rust/basic-serialization>Basic Serialization</a> - Object graph serialization</li>
<li class=""><a class="" href=/docs/row-format/#standard-row>Standard Row Format</a> - Shared layout for Java, Python, C++, and Rust</li>
<li class=""><a class="" href=/docs/specification/row_format_spec>Row Format Specification</a> - Protocol details</li>
</ul></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/row-format/rust.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/row-format/cpp><div class=pagination-nav__sublabel>Previous</div><div class=pagination-nav__label>C++ Row Format</div></a><a class="pagination-nav__link pagination-nav__link--next" href=/docs/row-format/troubleshooting><div class=pagination-nav__sublabel>Next</div><div class=pagination-nav__label>Troubleshooting</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=#overview class="table-of-contents__link toc-highlight">Overview</a><li><a href=#when-to-use-row-format class="table-of-contents__link toc-highlight">When to Use Row Format</a><li><a href=#basic-usage class="table-of-contents__link toc-highlight">Basic Usage</a><li><a href=#view-traversal-and-buffer-reuse class="table-of-contents__link toc-highlight">View Traversal and Buffer Reuse</a><li><a href=#nullability-and-field-order class="table-of-contents__link toc-highlight">Nullability and Field Order</a><li><a href=#supported-types class="table-of-contents__link toc-highlight">Supported Types</a><li><a href=#standard-binary-layout class="table-of-contents__link toc-highlight">Standard Binary Layout</a><li><a href=#validation-and-errors class="table-of-contents__link toc-highlight">Validation and Errors</a><li><a href=#performance-comparison class="table-of-contents__link toc-highlight">Performance Comparison</a><li><a href=#foryrow-vs-forystruct class="table-of-contents__link toc-highlight">ForyRow vs ForyStruct</a><li><a href=#related-topics class="table-of-contents__link toc-highlight">Related Topics</a></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</a><li class=footer__item><a class=footer__link-item href=/docs/start/>Usage</a><li class=footer__item><a class=footer__link-item href=/docs/benchmarks/>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>