Skip to content

feat: Add Rust language generation support (experimental)#7571

Draft
darrelmiller wants to merge 6 commits into
mainfrom
rust
Draft

feat: Add Rust language generation support (experimental)#7571
darrelmiller wants to merge 6 commits into
mainfrom
rust

Conversation

@darrelmiller

@darrelmiller darrelmiller commented Apr 6, 2026

Copy link
Copy Markdown
Member

fixes #4436

Summary

Adds experimental Rust language generation support to Kiota, enabling SDK generation targeting Rust from OpenAPI descriptions.

Changes

New Files (13)

  • PathSegmenter: RustPathSegmenter.cs — snake_case file/namespace naming
  • Refiner: RustRefiner.cs, RustReservedNamesProvider.cs, RustExceptionsReservedNamesProvider.cs — Rust-specific code DOM refinement pipeline
  • Writers: RustWriter.cs, RustConventionService.cs, CodeMethodWriter.cs, CodeClassDeclarationWriter.cs, CodeEnumWriter.cs, CodePropertyWriter.cs, CodeBlockEndWriter.cs
  • Tests: 7 test files covering refiners and writers

Integration Points

  • GenerationLanguage.cs — added Rust enum value
  • ILanguageRefiner.cs — wired RustRefiner
  • LanguageWriter.cs — wired RustWriter
  • PublicAPIExportService.cs — wired RustConventionService
  • appsettings.json — Rust dependency config (kiota-abstractions, kiota-http-reqwest, kiota-serialization-json/text/form)

Design Decisions

  • No inheritance model: Rust has no class inheritance — request builder properties stay on each struct (no MoveRequestBuilderPropertiesToBaseType)
  • Request builder properties → methods: Converted early in the refiner pipeline (before CorrectCoreType/ReplacePropertyNames) to avoid lookup failures
  • serde integration: Models derive Serialize/Deserialize with #[serde(rename)] for property mapping
  • Date/time types: Mapped to chrono crate types; GUIDs to uuid::Uuid
  • Reserved names: Escaped via Rust raw identifiers (r#name)
  • Inner classes: Moved to namespace level (Rust doesn't support nested type definitions)

Known Limitations

This is an experimental/community-supported first pass. Known areas for future improvement:

  • Enum variant casing uses ToFirstCharacterUpperCase() rather than full PascalCase conversion (e.g. some_valueSome_value instead of SomeValue)
  • Error mapping in request executors is stubbed out
  • Stream response handling is incomplete
  • Inherited serialization/deserialization chaining is not yet wired
  • TrimStart("Option<") in RustConventionService uses char-based trimming rather than prefix stripping
  • Test coverage is smoke-level for several writer branches

Maturity

Marked as Experimental with Community support experience in appsettings.json.

darrelmiller and others added 3 commits March 21, 2026 08:49
Add initial Rust code generation targeting the Kiota pipeline:

Generator components:
- RustWriter with 5 element writers (class, property, method, enum, block end)
- RustConventionService with Rust type mappings and naming conventions
- RustRefiner for snake_case naming, reserved word escaping, type replacements
- RustPathSegmenter for .rs file output with snake_case directories
- RustReservedNamesProvider covering Rust keywords and std types

Pipeline registrations:
- GenerationLanguage.Rust enum member
- LanguageWriter, ILanguageRefiner, PublicAPIExportService factory entries
- appsettings.json with Experimental/Community maturity level

Test coverage:
- 31 new tests across 7 test files covering writers and refiner
- All 1909 existing tests continue to pass

Known limitations:
- Generated code has type casing issues (Chrono vs chrono)
- Request builder struct fields lost due to base-type movement
- No mod.rs generation for module hierarchy
- Import statements need refinement

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Fix import paths: use clientNamespaceName instead of walking to root
- Move inner classes (query params) to namespace level for Rust compatibility
- Only register JSON serialization modules (form/text don't exist yet)
- Use Box<dyn Error + Send + Sync> consistently for error types
- Replace generic enum methods with serde-based string conversion
- Add serde_json::from_value deserialization in request executor body
- Use serde serialization for request body instead of Parsable trait
- Fix Option<String>.to_string() in raw URL constructor
- Suppress unused mut warnings in constructors without mutations
- Add proper derives for query parameter classes

Generated PetStore client now compiles with zero errors and zero warnings.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Replace RequestBuilder properties with methods in RustRefiner
  (navigation props like .ip(), .uuid(), .pet() now generated correctly)
- Handle complex/object types via serde_json raw values instead of
  generic get_object_value/write_object_value (dyn-compatible)
- Handle primitive collections with concrete method names
- Handle enum/object collections via serde raw value serialization
- Support Getter/Setter method kinds for navigation and fields
- Both httpbin.org and petstore demos run successfully against live APIs

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@darrelmiller darrelmiller requested a review from a team as a code owner April 6, 2026 12:36
@msgraph-bot msgraph-bot Bot added this to Kiota Apr 6, 2026
@baywet baywet marked this pull request as draft April 6, 2026 12:47
darrelmiller and others added 3 commits April 7, 2026 08:50
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Vincent Biret <vibiret@microsoft.com>
@github-actions

github-actions Bot commented Apr 7, 2026

Copy link
Copy Markdown
Contributor

Summary

Summary
Generated on: 04/07/2026 - 19:16:01
Coverage date: 04/07/2026 - 19:15:49 - 04/07/2026 - 19:15:55
Parser: MultiReport (3x Cobertura)
Assemblies: 2
Classes: 450
Files: 492
Line coverage: 69.8% (29868 of 42763)
Covered lines: 29868
Uncovered lines: 12895
Coverable lines: 42763
Total lines: 58590
Branch coverage: 67.7% (14112 of 20831)
Covered branches: 14112
Total branches: 20831
Method coverage: Feature is only available for sponsors

Coverage

kiota - 12.3%
Name Line Branch
kiota 12.3% 3.9%
kiota.Authentication.GitHub.DeviceCode.AccessCodeResponseJsonContext 0% 0%
kiota.Authentication.GitHub.DeviceCode.AccessTokenProvider 0% 0%
kiota.Authentication.GitHub.DeviceCode.DeviceCodeAuthenticationProvider 0%
kiota.Authentication.GitHub.DeviceCode.GitHubDeviceCodeResponse 0%
kiota.Authentication.GitHub.DeviceCode.GitHubDeviceCodeResponseJsonContext 0% 0%
kiota.Extension.CollectionExtensions 0% 0%
kiota.Extension.EnumerableExtensions 0% 0%
kiota.Extension.KiotaHostExtensions 27.2% 42%
kiota.Extension.StringExtensions 0% 0%
Kiota.Generated.KiotaAppSettings 0%
kiota.Handlers.BaseKiotaCommandHandler 4.1% 0%
kiota.Handlers.Client.AddHandler 0% 0%
kiota.Handlers.Client.EditHandler 0% 0%
kiota.Handlers.Client.GenerateHandler 0% 0%
kiota.Handlers.Client.RemoveHandler 0% 0%
kiota.Handlers.KiotaDownloadCommandHandler 8% 0%
kiota.Handlers.KiotaGenerateCommandHandler 15.7% 0%
kiota.Handlers.KiotaGitHubDeviceLoginCommandHandler 6% 0%
kiota.Handlers.KiotaGitHubLogoutCommandHandler 10.2% 0%
kiota.Handlers.KiotaGitHubPatLoginCommandHandler 10.5% 0%
kiota.Handlers.KiotaInfoCommandHandler 9.2% 0%
kiota.Handlers.KiotaRpcCommandHandler 8.3% 0%
kiota.Handlers.KiotaSearchBasedCommandHandler 0% 0%
kiota.Handlers.KiotaSearchCommandHandler 8.9% 0%
kiota.Handlers.KiotaShowCommandHandler 10.6% 0%
kiota.Handlers.KiotaUpdateCommandHandler 8.2% 0%
kiota.Handlers.Plugin.AddHandler 0% 0%
kiota.Handlers.Plugin.EditHandler 0% 0%
kiota.Handlers.Plugin.GenerateHandler 0% 0%
kiota.Handlers.Plugin.RemoveHandler 0% 0%
kiota.Handlers.Workspace.InitHandler 0% 0%
kiota.Handlers.Workspace.MigrateHandler 0% 0%
kiota.ILoggerExtensions 0% 0%
kiota.KiotaClientCommands 0%
kiota.KiotaConfigurationExtensions 0% 0%
kiota.KiotaConfigurationJsonContext 0% 0%
kiota.KiotaHost 90.6% 55.5%
kiota.KiotaPluginCommands 0% 0%
kiota.KiotaWorkspaceCommands 0%
kiota.Program 0% 0%
kiota.Rpc.AdaptiveCardInfo 0%
kiota.Rpc.AdaptiveCardMapper 0% 0%
kiota.Rpc.ForwardedLogger`1 0%
kiota.Rpc.LogEntry 0%
kiota.Rpc.ManifestResult 0%
kiota.Rpc.NoopLogger`1 0%
kiota.Rpc.OAuthFlow 0%
kiota.Rpc.OAuthFlows 0%
kiota.Rpc.OpenApiSpecVersionMapper 0% 0%
kiota.Rpc.PathItem 0%
kiota.Rpc.PluginAuth 0%
kiota.Rpc.PluginFunction 0%
kiota.Rpc.PluginResultMapper 0% 0%
kiota.Rpc.PluginRuntime 0%
kiota.Rpc.SearchOperationResult 0%
kiota.Rpc.SecurityRequirement 0%
kiota.Rpc.SecurityRequirementMapper 0% 0%
kiota.Rpc.SecuritySchemeInfo 0%
kiota.Rpc.SecuritySchemeMapper 0% 0%
kiota.Rpc.Server 0% 0%
kiota.Rpc.ServersMapper 0% 0%
kiota.Rpc.ShowPluginResult 0%
kiota.Rpc.ShowResult 0%
kiota.Telemetry.Config.AppInsightsConfig 0%
kiota.Telemetry.Config.OpenTelemetryConfig 0%
kiota.Telemetry.Config.TelemetryConfig 0%
kiota.Telemetry.Instrumentation 0%
kiota.Telemetry.Telemetry 0% 0%
Microsoft.Extensions.Configuration.Binder.SourceGeneration 0% 0%
System.Runtime.CompilerServices 0%
System.Text.RegularExpressions.Generated 52.6% 37.5%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F575C2A87E552CB2
99BDAB3FB0738A2D49AFE89CAF0EC7B9225D9B641CE772D5E__classNameRegex_0
90% 72.2%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F575C2A87E552CB2
99BDAB3FB0738A2D49AFE89CAF0EC7B9225D9B641CE772D5E__indexingNormalizationReg
ex_2
0% 0%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F575C2A87E552CB2
99BDAB3FB0738A2D49AFE89CAF0EC7B9225D9B641CE772D5E__namespaceNameRegex_1
78.1% 59%
Kiota.Builder - 82.1%
Name Line Branch
Kiota.Builder 82.1% 75.9%
Kiota.Builder.BaseStringComparisonComparer`1 83.3% 60%
Kiota.Builder.Caching.DocumentCachingProvider 63% 56.6%
Kiota.Builder.CodeDOM.BlockDeclaration 90.9% 83.3%
Kiota.Builder.CodeDOM.ClassDeclaration 55.5% 54.1%
Kiota.Builder.CodeDOM.CodeBlock`2 83.8% 78.4%
Kiota.Builder.CodeDOM.CodeClass 97.7% 93.1%
Kiota.Builder.CodeDOM.CodeComposedTypeBase 94.1% 75%
Kiota.Builder.CodeDOM.CodeConstant 100% 83.3%
Kiota.Builder.CodeDOM.CodeDocumentation 100% 87.5%
Kiota.Builder.CodeDOM.CodeElement 100% 96.1%
Kiota.Builder.CodeDOM.CodeEnum 100% 100%
Kiota.Builder.CodeDOM.CodeEnumOption 100% 100%
Kiota.Builder.CodeDOM.CodeFile 76.4% 62.5%
Kiota.Builder.CodeDOM.CodeFunction 100% 100%
Kiota.Builder.CodeDOM.CodeIndexer 100% 50%
Kiota.Builder.CodeDOM.CodeInterface 97.3% 77.7%
Kiota.Builder.CodeDOM.CodeIntersectionType 100%
Kiota.Builder.CodeDOM.CodeMethod 93% 89.4%
Kiota.Builder.CodeDOM.CodeNamespace 97.4% 88.7%
Kiota.Builder.CodeDOM.CodeParameter 100% 50%
Kiota.Builder.CodeDOM.CodeProperty 94.7% 65%
Kiota.Builder.CodeDOM.CodeTerminalWithKind`1 100% 100%
Kiota.Builder.CodeDOM.CodeType 96.5% 100%
Kiota.Builder.CodeDOM.CodeTypeBase 96.1% 75%
Kiota.Builder.CodeDOM.CodeUnionType 100%
Kiota.Builder.CodeDOM.CodeUsing 100% 100%
Kiota.Builder.CodeDOM.DeprecationInformation 83.3% 50%
Kiota.Builder.CodeDOM.DiscriminatorInformation 100% 84.2%
Kiota.Builder.CodeDOM.NamespaceDifferentialTracker 100% 87.5%
Kiota.Builder.CodeDOM.PagingInformation 42.8%
Kiota.Builder.CodeDOM.ProprietableBlock`2 90.6% 85.2%
Kiota.Builder.CodeDOM.ProprietableBlockDeclaration 93.1% 75%
Kiota.Builder.CodeRenderers.CodeRenderer 100% 90.1%
Kiota.Builder.CodeRenderers.TypeScriptCodeRenderer 14.2% 0%
Kiota.Builder.Configuration.DownloadConfiguration 25%
Kiota.Builder.Configuration.GenerationConfiguration 100% 66.1%
Kiota.Builder.Configuration.GitHubConfiguration 30.7%
Kiota.Builder.Configuration.KiotaConfiguration 0%
Kiota.Builder.Configuration.LanguagesInformation 66.6% 66.6%
Kiota.Builder.Configuration.PluginAuthConfiguration 96.4% 92.3%
Kiota.Builder.Configuration.SearchConfiguration 20%
Kiota.Builder.Configuration.SearchConfigurationBase 100%
Kiota.Builder.Configuration.StructuredMimeTypesCollection 84.3% 77.2%
Kiota.Builder.Configuration.UpdateConfiguration 27.2%
Kiota.Builder.EqualityComparers.GlobComparer 55.5% 33.3%
Kiota.Builder.EqualityComparers.OpenApiSchemaReferenceComparer 33.3% 50%
Kiota.Builder.EqualityComparers.OpenApiServerComparer 100% 72.7%
Kiota.Builder.Exceptions.InvalidSchemaException 33.3%
Kiota.Builder.Export.PublicApiExportService 89.5% 77.6%
Kiota.Builder.Extensions.AuthExtensions 100% 100%
Kiota.Builder.Extensions.CodeParametersEnumerableExtensions 100% 50%
Kiota.Builder.Extensions.CodePropertiesEnumerableExtensions 50% 25%
Kiota.Builder.Extensions.IEnumerableExtensions 0% 0%
Kiota.Builder.Extensions.IListExtensions 100% 100%
Kiota.Builder.Extensions.OpenApiDeprecationExtensionExtensions 100% 93.9%
Kiota.Builder.Extensions.OpenApiDocumentExtensions 100% 85.7%
Kiota.Builder.Extensions.OpenApiOperationExtensions 96.3% 75%
Kiota.Builder.Extensions.OpenApiSchemaExtensions 96.3% 87.5%
Kiota.Builder.Extensions.OpenApiSettingsExtensions 100% 50%
Kiota.Builder.Extensions.OpenApiUrlTreeNodeExtensions 84.8% 74.1%
Kiota.Builder.Extensions.StringExtensions 97.9% 86.2%
Kiota.Builder.Extensions.UriExtensions 100% 75%
Kiota.Builder.KiotaBuilder 86.5% 79.4%
Kiota.Builder.KiotaSearcher 75% 62.5%
Kiota.Builder.LanguageDependency 91.8% 76.9%
Kiota.Builder.LanguageInformation 95% 85.4%
Kiota.Builder.Lock.KiotaLock 100% 100%
Kiota.Builder.Lock.KiotaLockComparer 53% 95.2%
Kiota.Builder.Lock.KiotaLockGenerationContext 80.5% 39.6%
Kiota.Builder.Lock.LockManagementService 54.5% 35.7%
Kiota.Builder.Lock.StringIEnumerableDeepComparer 100% 62.5%
Kiota.Builder.Logging.AggregateLogger`1 0% 0%
Kiota.Builder.Logging.AggregateScope 0% 0%
Kiota.Builder.Logging.FileLogLogger 86.2% 75%
Kiota.Builder.Logging.FileLogLogger`1 0% 0%
Kiota.Builder.Logging.FileLogLoggerProvider 0% 0%
Kiota.Builder.Manifest.ApiDependencyComparer 74.2% 67.8%
Kiota.Builder.Manifest.ManifestManagementService 100%
Kiota.Builder.Manifest.RequestInfoComparer 100% 90%
Kiota.Builder.ModelClassBuildLifecycle 95% 90%
Kiota.Builder.OpenApiDocumentDownloadService 73.1% 63.1%
Kiota.Builder.OpenApiExtensions.ExtensionConfirmation 100%
Kiota.Builder.OpenApiExtensions.ExtensionResponseSemantics 100%
Kiota.Builder.OpenApiExtensions.ExtensionResponseSemanticsProperties 100%
Kiota.Builder.OpenApiExtensions.ExtensionSecurityInfo 100%
Kiota.Builder.OpenApiExtensions.OpenApiAiAdaptiveCardExtension 98.7% 98.7%
Kiota.Builder.OpenApiExtensions.OpenApiAiAuthReferenceIdExtension 100%
Kiota.Builder.OpenApiExtensions.OpenApiAiCapabilitiesExtension 100% 77.7%
Kiota.Builder.OpenApiExtensions.OpenApiAiReasoningInstructionsExtension 100% 75%
Kiota.Builder.OpenApiExtensions.OpenApiAiRespondingInstructionsExtension 100% 75%
Kiota.Builder.OpenApiExtensions.OpenApiDescriptionForModelExtension 100%
Kiota.Builder.OpenApiExtensions.OpenApiKiotaExtension 100% 70%
Kiota.Builder.OpenApiExtensions.OpenApiKiotaMergedExtension 77.7%
Kiota.Builder.OpenApiExtensions.OpenApiLegalInfoUrlExtension 11.1%
Kiota.Builder.OpenApiExtensions.OpenApiLogoExtension 4.7% 0%
Kiota.Builder.OpenApiExtensions.OpenApiPrivacyPolicyUrlExtension 11.1%
Kiota.Builder.OpenApiExtensions.OpenApiSimpleStringExtension 100% 66.6%
Kiota.Builder.OrderComparers.BaseCodeParameterOrderComparer 93.7% 92.3%
Kiota.Builder.OrderComparers.CodeElementOrderComparer 100% 97.6%
Kiota.Builder.OrderComparers.CodeElementOrderComparerPython 92.3% 83.3%
Kiota.Builder.OrderComparers.CodeElementOrderComparerWithExternalMethods 100% 90%
Kiota.Builder.PathSegmenters.CommonPathSegmenter 100% 83.3%
Kiota.Builder.PathSegmenters.CSharpPathSegmenter 100% 83.3%
Kiota.Builder.PathSegmenters.DartPathSegmenter 100%
Kiota.Builder.PathSegmenters.GoPathSegmenter 97.6% 50%
Kiota.Builder.PathSegmenters.HttpPathSegmenter 83.3%
Kiota.Builder.PathSegmenters.JavaPathSegmenter 100% 50%
Kiota.Builder.PathSegmenters.PhpPathSegmenter 100% 50%
Kiota.Builder.PathSegmenters.PythonPathSegmenter 90.9% 50%
Kiota.Builder.PathSegmenters.RubyPathSegmenter 90.4% 71.4%
Kiota.Builder.PathSegmenters.RustPathSegmenter 25%
Kiota.Builder.PathSegmenters.TypeScriptPathSegmenter 100% 95%
Kiota.Builder.Plugins.AdaptiveCardTemplate 61.5% 50%
Kiota.Builder.Plugins.AuthComparer 66.6% 34.2%
Kiota.Builder.Plugins.OpenApiPluginWalker 100% 100%
Kiota.Builder.Plugins.OpenAPIRuntimeComparer 100% 80%
Kiota.Builder.Plugins.OpenApiRuntimeSpecComparer 100% 60%
Kiota.Builder.Plugins.PluginsGenerationService 84.6% 73.7%
Kiota.Builder.Plugins.UnsupportedSecuritySchemeException 100%
Kiota.Builder.Refiners.AdditionalUsingEvaluator 100%
Kiota.Builder.Refiners.CodeUsingComparer 100% 70%
Kiota.Builder.Refiners.CodeUsingDeclarationNameComparer 100% 93.7%
Kiota.Builder.Refiners.CommonLanguageRefiner 98% 92.8%
Kiota.Builder.Refiners.CSharpExceptionsReservedNamesProvider 100%
Kiota.Builder.Refiners.CSharpRefiner 98.3% 93.7%
Kiota.Builder.Refiners.CSharpReservedClassNamesProvider 100%
Kiota.Builder.Refiners.CSharpReservedNamesProvider 100%
Kiota.Builder.Refiners.CSharpReservedTypesProvider 100%
Kiota.Builder.Refiners.DartExceptionsReservedNamesProvider 100%
Kiota.Builder.Refiners.DartRefiner 93.1% 89%
Kiota.Builder.Refiners.DartReservedNamesProvider 100%
Kiota.Builder.Refiners.GoExceptionsReservedNamesProvider 100%
Kiota.Builder.Refiners.GoNamespaceReservedNamesProvider 100%
Kiota.Builder.Refiners.GoRefiner 93.1% 89.5%
Kiota.Builder.Refiners.GoReservedNamesProvider 100%
Kiota.Builder.Refiners.HttpRefiner 61.2% 47.7%
Kiota.Builder.Refiners.HttpReservedNamesProvider 100%
Kiota.Builder.Refiners.ILanguageRefiner 100% 100%
Kiota.Builder.Refiners.JavaExceptionsReservedNamesProvider 100%
Kiota.Builder.Refiners.JavaRefiner 98.2% 95.1%
Kiota.Builder.Refiners.JavaReservedNamesProvider 100%
Kiota.Builder.Refiners.PhpExceptionsReservedNamesProvider 100%
Kiota.Builder.Refiners.PhpRefiner 100% 95.7%
Kiota.Builder.Refiners.PhpReservedNamesProvider 100%
Kiota.Builder.Refiners.PythonExceptionsReservedNamesProvider 100%
Kiota.Builder.Refiners.PythonRefiner 98.2% 94.5%
Kiota.Builder.Refiners.PythonReservedNamesProvider 100%
Kiota.Builder.Refiners.RubyRefiner 83.1% 66.3%
Kiota.Builder.Refiners.RubyReservedNamesProvider 100%
Kiota.Builder.Refiners.RustExceptionsReservedNamesProvider 100%
Kiota.Builder.Refiners.RustRefiner 73.3% 63.5%
Kiota.Builder.Refiners.RustReservedNamesProvider 100%
Kiota.Builder.Refiners.TypeScriptExceptionsReservedNamesProvider 100%
Kiota.Builder.Refiners.TypeScriptRefiner 97.6% 88.9%
Kiota.Builder.Refiners.TypeScriptReservedNamesProvider 100%
Kiota.Builder.SearchProviders.APIsGuru.ApiContact 100%
Kiota.Builder.SearchProviders.APIsGuru.ApiEntriesJsonContext 77.7% 45.7%
Kiota.Builder.SearchProviders.APIsGuru.ApiEntry 100%
Kiota.Builder.SearchProviders.APIsGuru.ApiInformation 100%
Kiota.Builder.SearchProviders.APIsGuru.ApiOrigin 0%
Kiota.Builder.SearchProviders.APIsGuru.APIsGuruSearchProvider 95.1% 50%
Kiota.Builder.SearchProviders.APIsGuru.ApiVersion 100%
Kiota.Builder.SearchProviders.GitHub.Authentication.AccessCodeResponse 0%
Kiota.Builder.SearchProviders.GitHub.Authentication.AnonymousAuthentication
Provider
100%
Kiota.Builder.SearchProviders.GitHub.Authentication.BaseAuthenticationProvi
der`1
40% 6.2%
Kiota.Builder.SearchProviders.GitHub.Authentication.PatAccessTokenProvider 100% 83.3%
Kiota.Builder.SearchProviders.GitHub.Authentication.PatAuthenticationProvid
er
87.5%
Kiota.Builder.SearchProviders.GitHub.Authentication.TempFolderCachingAccess
TokenProvider
95.8% 50%
Kiota.Builder.SearchProviders.GitHub.Authentication.TempFolderTokenStorageS
ervice
70.5% 83.3%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.GitHubClient 94.1% 100%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.AppPermissions 0% 0%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.BasicError 64.5% 16.6%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.ContentFile 56.6% 0%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.ContentFile__links 74% 25%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.ContentSubmodule 0% 0%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.ContentSubmodule__
links
0% 0%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.ContentSymlink 0% 0%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.ContentSymlink__li
nks
0% 0%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.Enterprise 0% 0%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.Installation 0% 0%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.NullableLicenseSim
ple
0% 0%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.NullableSimpleUser 61.7% 25%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.ReactionRollup 70.8% 25%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.Release 59.7% 25%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.ReleaseAsset 66.6% 25%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.RepoSearchResultIt
em
0% 0%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.RepoSearchResultIt
em_permissions
0% 0%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.Repositories 0% 0%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.Repositories_match
es
0% 0%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.Repositories503Err
or
0% 0%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.SimpleUser 61.7% 25%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.ValidationError 0% 0%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.ValidationError_er
rors
0% 0%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Models.WithPathGetRespons
eMember1
0% 0%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Repos.Item.Item.Contents.
ContentsRequestBuilder
72.7%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Repos.Item.Item.Contents.
Item.WithPathItemRequestBuilder
41.4% 16.6%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Repos.Item.Item.Releases.
ReleasesRequestBuilder
69.2% 50%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Repos.Item.Item.WithRepoI
temRequestBuilder
62.5%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Repos.Item.WithOwnerItemR
equestBuilder
72.7%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Repos.ReposRequestBuilder 72.7%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Search.Repositories.Repos
itoriesGetResponse
74% 25%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Search.Repositories.Repos
itoriesRequestBuilder
79.3%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.Search.SearchRequestBuild
er
57.1%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.User.Installations.Instal
lationsGetResponse
0% 0%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.User.Installations.Instal
lationsRequestBuilder
0%
Kiota.Builder.SearchProviders.GitHub.GitHubClient.User.UserRequestBuilder 0%
Kiota.Builder.SearchProviders.GitHub.GitHubSearchProvider 74.5% 53.4%
Kiota.Builder.SearchProviders.GitHub.Index.BlockList 100%
Kiota.Builder.SearchProviders.GitHub.Index.IndexApiEntry 100%
Kiota.Builder.SearchProviders.GitHub.Index.IndexApiProperty 100%
Kiota.Builder.SearchProviders.GitHub.Index.IndexRoot 100%
Kiota.Builder.SearchProviders.GitHub.Index.IndexRootJsonContext 3.4% 0%
Kiota.Builder.SearchProviders.GitHub.Index.YamlNamingConvention 50%
Kiota.Builder.SearchProviders.MSGraph.OpenApiSpecSearchProvider 83.3% 50%
Kiota.Builder.SearchProviders.SearchResult 100%
Kiota.Builder.Settings.AuthenticationSettings 0%
Kiota.Builder.Settings.EnvironmentVariables 0%
Kiota.Builder.Settings.SettingsFile 0%
Kiota.Builder.Settings.SettingsFileGenerationContext 0% 0%
Kiota.Builder.Settings.SettingsFileManagementService 38.7% 20%
Kiota.Builder.Settings.VsCodeSettingsManager 0% 0%
Kiota.Builder.StructuralPropertiesReservedNameProvider 100%
Kiota.Builder.UpdateService 97.1% 76.4%
Kiota.Builder.Validation.DivergentResponseSchema 100% 100%
Kiota.Builder.Validation.GetWithBody 100% 100%
Kiota.Builder.Validation.InconsistentTypeFormatPair 100% 92.8%
Kiota.Builder.Validation.JsonNodeComparer 0% 0%
Kiota.Builder.Validation.KeyValueComparer`2 0% 0%
Kiota.Builder.Validation.KnownAndNotSupportedFormats 100% 100%
Kiota.Builder.Validation.MissingDiscriminator 100% 78.5%
Kiota.Builder.Validation.MultipleServerEntries 100% 75%
Kiota.Builder.Validation.NoContentWithBody 100% 100%
Kiota.Builder.Validation.NoServerEntry 100% 87.5%
Kiota.Builder.Validation.OpenApiDiscriminatorComparer 0% 0%
Kiota.Builder.Validation.OpenApiSchemaComparer 88.6% 87.5%
Kiota.Builder.Validation.UrlFormEncodedComplex 100% 100%
Kiota.Builder.Validation.ValidationRuleSetExtensions 100% 100%
Kiota.Builder.VersionComparer 66.6% 33.3%
Kiota.Builder.WorkspaceManagement.ApiClientConfiguration 98.1% 75%
Kiota.Builder.WorkspaceManagement.ApiClientConfigurationComparer 100% 70.8%
Kiota.Builder.WorkspaceManagement.ApiPluginConfiguration 84.2% 50%
Kiota.Builder.WorkspaceManagement.ApiPluginConfigurationComparer 100% 91.6%
Kiota.Builder.WorkspaceManagement.BaseApiConsumerConfiguration 100% 87.5%
Kiota.Builder.WorkspaceManagement.BaseApiConsumerConfigurationComparer`1 100% 64.2%
Kiota.Builder.WorkspaceManagement.DescriptionStorageService 98% 75%
Kiota.Builder.WorkspaceManagement.WorkspaceConfiguration 73.3% 50%
Kiota.Builder.WorkspaceManagement.WorkspaceConfigurationGenerationContext 79.2% 45.7%
Kiota.Builder.WorkspaceManagement.WorkspaceConfigurationStorageService 98.1% 91.1%
Kiota.Builder.WorkspaceManagement.WorkspaceManagementService 76% 62.2%
Kiota.Builder.Writers.BaseElementWriter`2 100% 50%
Kiota.Builder.Writers.CodeClassExtensions 85.7% 60%
Kiota.Builder.Writers.CodeParameterExtensions 100% 100%
Kiota.Builder.Writers.CodePropertyTypeComparer 76.9% 40%
Kiota.Builder.Writers.CodeTypeComparer 84.3% 76.3%
Kiota.Builder.Writers.CodeTypeWriter 100%
Kiota.Builder.Writers.CommonLanguageConventionService 100% 100%
Kiota.Builder.Writers.CSharp.CodeBlockEndWriter 100% 83.3%
Kiota.Builder.Writers.CSharp.CodeClassDeclarationWriter 100% 90.9%
Kiota.Builder.Writers.CSharp.CodeEnumWriter 100% 90.6%
Kiota.Builder.Writers.CSharp.CodeIndexerWriter 100% 75%
Kiota.Builder.Writers.CSharp.CodeMethodWriter 95.5% 89.6%
Kiota.Builder.Writers.CSharp.CodePropertyWriter 96.6% 90%
Kiota.Builder.Writers.CSharp.CSharpConventionService 86.3% 80.8%
Kiota.Builder.Writers.CSharp.CSharpWriter 100%
Kiota.Builder.Writers.CSharp.TypeDefinitionExtensions 100% 100%
Kiota.Builder.Writers.Dart.CodeBlockEndWriter 100%
Kiota.Builder.Writers.Dart.CodeClassDeclarationWriter 97.5% 76.4%
Kiota.Builder.Writers.Dart.CodeEnumWriter 100% 100%
Kiota.Builder.Writers.Dart.CodeMethodWriter 83.1% 74%
Kiota.Builder.Writers.Dart.CodePropertyWriter 90% 86.8%
Kiota.Builder.Writers.Dart.DartConventionService 78.3% 73.3%
Kiota.Builder.Writers.Dart.DartWriter 100%
Kiota.Builder.Writers.GenericCodeElementWriter 100%
Kiota.Builder.Writers.GenericCodeMethodWriter 100%
Kiota.Builder.Writers.GenericCodePropertyWriter 100%
Kiota.Builder.Writers.GenericWriter`1 100%
Kiota.Builder.Writers.Go.CodeBlockEndWriter 100% 75%
Kiota.Builder.Writers.Go.CodeClassDeclarationWriter 100% 70%
Kiota.Builder.Writers.Go.CodeEnumWriter 100% 100%
Kiota.Builder.Writers.Go.CodeFileBlockEndWriter 100%
Kiota.Builder.Writers.Go.CodeFileDeclarationWriter 97% 72.7%
Kiota.Builder.Writers.Go.CodeInterfaceDeclarationWriter 100% 70%
Kiota.Builder.Writers.Go.CodeMethodWriter 95.5% 84.8%
Kiota.Builder.Writers.Go.CodePropertyWriter 95% 85.7%
Kiota.Builder.Writers.Go.CodeProprietableBlockDeclarationWriter`1 100% 92.1%
Kiota.Builder.Writers.Go.GoCodeParameterOrderComparer 94.7% 66.6%
Kiota.Builder.Writers.Go.GoConventionService 88.6% 72.8%
Kiota.Builder.Writers.Go.GoNamespaceExtensions 100% 87.5%
Kiota.Builder.Writers.Go.GoWriter 100%
Kiota.Builder.Writers.Go.StringExtensions 100% 100%
Kiota.Builder.Writers.Http.CodeClassDeclarationWriter 66.6% 50%
Kiota.Builder.Writers.Http.CodeProprietableBlockDeclarationWriter`1 100%
Kiota.Builder.Writers.Http.HttpConventionService 23% 10.8%
Kiota.Builder.Writers.Http.HttpWriter 100%
Kiota.Builder.Writers.Java.CodeBlockEndWriter 100% 75%
Kiota.Builder.Writers.Java.CodeClassDeclarationWriter 100% 90.9%
Kiota.Builder.Writers.Java.CodeEnumWriter 100% 80%
Kiota.Builder.Writers.Java.CodeMethodWriter 94.8% 85.7%
Kiota.Builder.Writers.Java.CodePropertyWriter 87.8% 81.4%
Kiota.Builder.Writers.Java.JavaConventionService 92% 74.2%
Kiota.Builder.Writers.Java.JavaWriter 100%
Kiota.Builder.Writers.LanguageWriter 93.9% 88%
Kiota.Builder.Writers.NamespaceClassNamesProvider 100% 100%
Kiota.Builder.Writers.Php.CodeBlockEndWriter 100%
Kiota.Builder.Writers.Php.CodeClassDeclarationWriter 100% 100%
Kiota.Builder.Writers.Php.CodeEnumWriter 100% 75%
Kiota.Builder.Writers.Php.CodeMethodWriter 96.4% 85.7%
Kiota.Builder.Writers.Php.CodePropertyWriter 94% 90.6%
Kiota.Builder.Writers.Php.PhpConventionService 95.4% 86.4%
Kiota.Builder.Writers.Php.PhpWriter 100%
Kiota.Builder.Writers.ProprietableBlockExtensions 95.4% 83.3%
Kiota.Builder.Writers.Python.CodeBlockEndWriter 100%
Kiota.Builder.Writers.Python.CodeClassDeclarationWriter 100% 93.7%
Kiota.Builder.Writers.Python.CodeEnumWriter 100% 100%
Kiota.Builder.Writers.Python.CodeMethodWriter 97% 89.9%
Kiota.Builder.Writers.Python.CodeNameSpaceWriter 100%
Kiota.Builder.Writers.Python.CodePropertyWriter 98% 87.5%
Kiota.Builder.Writers.Python.CodeUsingWriter 97.9% 84.6%
Kiota.Builder.Writers.Python.PythonCodeParameterOrderComparer 66.6% 38.8%
Kiota.Builder.Writers.Python.PythonConventionService 88.1% 81.5%
Kiota.Builder.Writers.Python.PythonRelativeImportManager 84.6% 60%
Kiota.Builder.Writers.Python.PythonWriter 100%
Kiota.Builder.Writers.RelativeImportManager 87.2% 51.7%
Kiota.Builder.Writers.RequestParams 100% 50%
Kiota.Builder.Writers.Ruby.CodeBlockEndWriter 100% 75%
Kiota.Builder.Writers.Ruby.CodeClassDeclarationWriter 100% 73.5%
Kiota.Builder.Writers.Ruby.CodeEnumWriter 100% 100%
Kiota.Builder.Writers.Ruby.CodeMethodWriter 96.4% 73.5%
Kiota.Builder.Writers.Ruby.CodeNamespaceWriter 100% 100%
Kiota.Builder.Writers.Ruby.CodePropertyWriter 100% 87.5%
Kiota.Builder.Writers.Ruby.RubyConventionService 86% 79.1%
Kiota.Builder.Writers.Ruby.RubyWriter 100%
Kiota.Builder.Writers.Rust.CodeBlockEndWriter 0%
Kiota.Builder.Writers.Rust.CodeClassDeclarationWriter 47.1% 18.3%
Kiota.Builder.Writers.Rust.CodeEnumWriter 100% 100%
Kiota.Builder.Writers.Rust.CodeMethodWriter 43.3% 24.2%
Kiota.Builder.Writers.Rust.CodePropertyWriter 69.4% 75%
Kiota.Builder.Writers.Rust.RustConventionService 52.6% 46.4%
Kiota.Builder.Writers.Rust.RustWriter 100%
Kiota.Builder.Writers.StringExtensions 100% 100%
Kiota.Builder.Writers.TypeScript.CodeBlockEndWriter 100% 90%
Kiota.Builder.Writers.TypeScript.CodeClassDeclarationWriter 100% 87.5%
Kiota.Builder.Writers.TypeScript.CodeComposedTypeBaseWriter`1 100% 100%
Kiota.Builder.Writers.TypeScript.CodeConstantWriter 89.1% 79.8%
Kiota.Builder.Writers.TypeScript.CodeEnumWriter 100% 100%
Kiota.Builder.Writers.TypeScript.CodeFileBlockEndWriter 100%
Kiota.Builder.Writers.TypeScript.CodeFileDeclarationWriter 96.8% 81.8%
Kiota.Builder.Writers.TypeScript.CodeFunctionWriter 94% 81.3%
Kiota.Builder.Writers.TypeScript.CodeInterfaceDeclarationWriter 100% 87.5%
Kiota.Builder.Writers.TypeScript.CodeIntersectionTypeWriter 100%
Kiota.Builder.Writers.TypeScript.CodeMethodWriter 97.2% 84.4%
Kiota.Builder.Writers.TypeScript.CodePropertyWriter 96.2% 95.8%
Kiota.Builder.Writers.TypeScript.CodeUnionTypeWriter 100%
Kiota.Builder.Writers.TypeScript.CodeUsingWriter 100% 90.9%
Kiota.Builder.Writers.TypeScript.TypeScriptConventionService 87.4% 82.4%
Kiota.Builder.Writers.TypeScript.TypescriptRelativeImportManager 83.3% 57.1%
Kiota.Builder.Writers.TypeScript.TypeScriptWriter 100%
Kiota.Generated.KiotaVersion 100%
System.Text.RegularExpressions.Generated 72.4% 58.9%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDAA00F7CC1CF62D
E700244B5486217D72A1B2A43346B42C9A444A670292E2704___enumValueNameRegex_16
77.1% 56.2%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDAA00F7CC1CF62D
E700244B5486217D72A1B2A43346B42C9A444A670292E2704__AtSignPathParameterRegex
_2
77.1% 65%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDAA00F7CC1CF62D
E700244B5486217D72A1B2A43346B42C9A444A670292E2704__CapitalizedFirstLetterAf
terDot_13
30.4% 15.3%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDAA00F7CC1CF62D
E700244B5486217D72A1B2A43346B42C9A444A670292E2704__descriptionCleanupRegex_
4
100% 100%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDAA00F7CC1CF62D
E700244B5486217D72A1B2A43346B42C9A444A670292E2704__factoryMethodIndexParser
_14
70.2% 57.1%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDAA00F7CC1CF62D
E700244B5486217D72A1B2A43346B42C9A444A670292E2704__idClassNameCleanup_3
91.7% 82.3%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDAA00F7CC1CF62D
E700244B5486217D72A1B2A43346B42C9A444A670292E2704__MultiIndexSameLevelClean
upRegex_11
79.6% 66%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDAA00F7CC1CF62D
E700244B5486217D72A1B2A43346B42C9A444A670292E2704__nonAsciiReplaceRegex_15
48% 42.8%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDAA00F7CC1CF62D
E700244B5486217D72A1B2A43346B42C9A444A670292E2704__NumbersSpellingRegex_10
76.9% 66.6%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDAA00F7CC1CF62D
E700244B5486217D72A1B2A43346B42C9A444A670292E2704__PathParametersRegex_1
96.4% 90.3%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDAA00F7CC1CF62D
E700244B5486217D72A1B2A43346B42C9A444A670292E2704__pathParamMatcher_7
77.9% 63.6%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDAA00F7CC1CF62D
E700244B5486217D72A1B2A43346B42C9A444A670292E2704__PluginOperationIdCleanup
Regex_12
88.4% 78.5%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDAA00F7CC1CF62D
E700244B5486217D72A1B2A43346B42C9A444A670292E2704__propertyCleanupRegex_9
82.7% 73%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDAA00F7CC1CF62D
E700244B5486217D72A1B2A43346B42C9A444A670292E2704__removePctEncodedCharacte
rs_8
83.3% 61.5%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDAA00F7CC1CF62D
E700244B5486217D72A1B2A43346B42C9A444A670292E2704__stripExtensionForIndexer
sRegex_5
48.4% 40.3%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDAA00F7CC1CF62D
E700244B5486217D72A1B2A43346B42C9A444A670292E2704__stripExtensionForIndexer
sTestRegex_6
45.6% 32.7%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDAA00F7CC1CF62D
E700244B5486217D72A1B2A43346B42C9A444A670292E2704__vendorStripRegex_0
85.9% 72.7%

@Ashutosh0x

Copy link
Copy Markdown

Hi @darrelmiller, this is excellent work! I've been studying the Kiota codebase with the goal of contributing Rust support, and I'm glad to see this experimental implementation already landing.

I'd love to help move this from Experimental to Stable. I've been working through the codebase and have a few observations on the known limitations you listed:

1. Enum variant casing — I can contribute a proper to_pascal_case conversion that handles some_valueSomeValue correctly, using Rust's naming conventions from RFC 430.

2. Error mapping in request executors — This is critical for production use. I'm thinking of a KiotaError enum that wraps HTTP status codes and deserialization failures, similar to how reqwest::Error is structured.

3. Inherited serialization/deserialization chaining — Since Rust doesn't have inheritance, I'd propose using trait default methods + a serialize_fields helper that each struct calls, composing parent fields via delegation rather than inheritance.

4. Stream response handlingtokio::io::AsyncRead + bytes::Bytes for streaming, with futures::Stream<Item = Result<Bytes, Error>> for chunked transfers.

I've also started work on the companion crates that this generator will need:

  • kiota-abstractions-rust — core traits (RequestAdapter, Parsable, SerializationWriter)
  • kiota-http-reqwest — reqwest-based HTTP client
  • kiota-serialization-json — serde_json integration

Would you be open to contributions on any of these areas? I'm particularly interested in the abstractions crate since it's the foundation everything else depends on.

Also, I noticed the appsettings.json references these crate names — are those finalized, or still up for discussion?

@baywet

baywet commented Jun 22, 2026

Copy link
Copy Markdown
Member

@Ashutosh0x we'd need somebody to drive the implementation work here. Darrel won't have the bandwidth to complete it.
The std uri template implementation for rust is completed and published. The next step would be to do the same for kiota libraries (abstractions, serialization, http...) under github.com/kiota-community.

If you want to drive this, please get in touch with @andreaTP.

You'll find a lot of additional context in:

Let me know if you have any additional comments or questions.

@Ashutosh0x

Copy link
Copy Markdown

@baywet Thank you for the clear direction! I'd love to drive the Rust implementation work.

I'll reach out to @andreaTP to coordinate. Here's my plan for the kiota-community crates:

Phase 1: Core Abstractions (kiota-abstractions-rust)

  • RequestAdapter trait
  • Parsable trait (with serde integration)
  • SerializationWriter / ParseNode traits
  • RequestInformation builder
  • Error types (ApiError, ApiException)

Phase 2: Serialization (kiota-serialization-json, kiota-serialization-text, kiota-serialization-form)

  • JSON via serde_json
  • Text/plain and form-urlencoded support

Phase 3: HTTP Client (kiota-http-reqwest)

  • reqwest-based RequestAdapter implementation
  • Middleware pipeline (retry, redirect, auth)
  • tokio async runtime

Phase 4: Integration & Validation

  • Generate Open Payments Rust SDK from the OpenAPI spec
  • End-to-end test against a running Rafiki instance

I've already reviewed the referenced issues and will study:

I've also submitted a proposal to the Interledger Foundation SDK Grant Program to fund this work, which would allow me to dedicate focused time over 6 months.

Looking forward to collaborating!

@Ashutosh0x

Copy link
Copy Markdown

Hi @andreaTP,

@baywet pointed me to you regarding driving the Rust implementation for Kiota (ref: #7571 (comment)).

I'd love to take ownership of the Rust companion crates under kiota-community. Here's what I'm planning:

Crates to build:

  1. kiota-abstractions — Core traits (RequestAdapter, Parsable, SerializationWriter, ParseNode)
  2. kiota-http-reqwestreqwest-based HTTP client with middleware pipeline
  3. kiota-serialization-jsonserde_json integration
  4. kiota-serialization-text — Text serialization
  5. kiota-serialization-form — Form URL-encoded serialization

My background:

  • I've been studying the Kiota codebase (Go and TypeScript writers) and have a working prototype of the Rust writer on my fork: https://github.com/Ashutosh0x/kiota/tree/feat/rust-language-support
  • I've reviewed the existing std-uritemplate-rust crate for reference on structure and publishing
  • I've submitted a proposal to the Interledger Foundation SDK Grant Program to fund dedicated time on this work
  • I've also been contributing reviews to the open-payments-rust project (RFC 9421 HTTP signatures)

Questions:

  1. Should I create the crate repos under kiota-community, or would you prefer I start in my own namespace and transfer later?
  2. Is there a preferred crate naming convention? (e.g., kiota-abstractions vs kiota-abstractions-rust)
  3. Are there design docs or trait signatures I should follow from the existing Java/Go/Python abstractions?
  4. Would you prefer I join the Kiota Discord (Discord server #6093) for ongoing coordination?

Looking forward to collaborating!

@Ashutosh0x

Copy link
Copy Markdown

🦀 Rust Companion Crates — All 6 Published

Following up on this PR, I've built the complete set of Rust companion crates that the generated code depends on. All crates compile on Rust 1.96.0 stable with 27 passing tests.

Repositories

Crate Repository Status
kiota-abstractions Ashutosh0x/kiota-abstractions-rust ✅ Compiles, 14 tests pass
kiota-serialization-json Ashutosh0x/kiota-serialization-json-rust ✅ Compiles, 13 tests pass
kiota-serialization-text Ashutosh0x/kiota-serialization-text-rust ✅ Compiles
kiota-serialization-form Ashutosh0x/kiota-serialization-form-rust ✅ Compiles
kiota-http-reqwest Ashutosh0x/kiota-http-reqwest-rust ✅ Compiles
kiota-bundle Ashutosh0x/kiota-bundle-rust ✅ Re-exports all crates

Abstractions Surface Coverage

The abstractions crate matches the full kiota-dart surface:

  • \RequestAdapter\, \RequestInformation\, \BaseRequestBuilder\
  • \Parsable\, \ParseNode\, \SerializationWriter\ (+ factories)
  • \BackingStore\, \BackedModel\, \InMemoryBackingStore\
  • \AuthenticationProvider\, \AccessTokenProvider\, \BaseBearerTokenAuthProvider\
  • \DateOnly\, \TimeOnly\, \UntypedNode\, \MultipartBody\
  • \AdditionalDataHolder\, \CaseInsensitiveMap\, \ApiClientBuilder\

Happy to transfer these to \kiota-community\ when the namespace is confirmed. @andreaTP @baywet

@Ashutosh0x

Copy link
Copy Markdown

Correction to my previous comment

I want to be precise about the current state:

What actually works today:

  • kiota-abstractions — compiles cleanly, 14 unit tests passing (DateOnly, TimeOnly, CaseInsensitiveMap, BackingStore, UntypedNode)
  • kiota-serialization-json — compiles cleanly, 13 unit tests passing (parse + write for string, bool, number, null, child nodes, collections, factory validation)
  • kiota-serialization-text — compiles, no tests yet
  • kiota-serialization-form — compiles, no tests yet
  • kiota-http-reqwest — compiles, no tests yet
  • kiota-bundle — re-export crate, no independent logic

What's honest about the scope:
This is a first-pass implementation modeled after kiota-dart. The core trait surface is covered (Parsable, ParseNode, SerializationWriter, RequestAdapter, AuthenticationProvider, BackingStore), but this is not production-ready — it needs integration testing against actual generated code, expanded unit tests for all crates, and review from the maintainers.

Disclosure: These crates were developed with the assistance of generative AI (GitHub Copilot / Gemini). All code has been reviewed, compiled, and tested by me.

Happy to discuss scope, requirements, and merge expectations whenever you're ready. @andreaTP @baywet

@baywet

baywet commented Jun 22, 2026

Copy link
Copy Markdown
Member

@Ashutosh0x please join the discord server, especially the rust channel. While we'll keep all the implementation work on issues and pull requests on the multiple repositories, the discord server has been instrumental getting the coordination in place for the dart implementation across repositories.

@Ashutosh0x

Copy link
Copy Markdown

Nice work on this! I'm building the runtime crates that generated code would depend on — abstractions, JSON serialization, and HTTP client (reqwest-based).

They're at kiota-community/kiota-rust#19 with 57 tests passing.

I'd like to make sure the trait signatures match what the writer emits here. For example:

  • Does the generated code expect \Parsable\ with \get_field_deserializers()\ returning a HashMap of closures?
  • Does it use \RequestAdapter::send()\ with async_trait?

Happy to adjust the runtime API to fit. Let me know if there's a sample of generated Rust output I can test against.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

Rust generator support?

3 participants