Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add go backing store support. #2185

Merged
merged 7 commits into from
Jan 27, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/Kiota.Builder/KiotaBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1349,7 +1349,7 @@ private void CreatePropertiesForModelClass(OpenApiUrlTreeNode currentNode, OpenA
private const string AdditionalDataPropName = "AdditionalData";
private const string BackingStorePropertyName = "BackingStore";
private const string BackingStoreInterface = "IBackingStore";
private const string BackedModelInterface = "IBackedModel";
internal const string BackedModelInterface = "IBackedModel";
private const string ParseNodeInterface = "IParseNode";
internal const string AdditionalHolderInterface = "IAdditionalDataHolder";
internal static void AddSerializationMembers(CodeClass model, bool includeAdditionalProperties, bool usesBackingStore) {
Expand Down
6 changes: 5 additions & 1 deletion src/Kiota.Builder/Refiners/GoRefiner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Xml.Linq;
using Kiota.Builder.CodeDOM;
using Kiota.Builder.Configuration;
using Kiota.Builder.Extensions;
Expand Down Expand Up @@ -139,6 +140,7 @@ public override Task Refine(CodeNamespace generatedCode, CancellationToken cance
RemoveHandlerFromRequestBuilder(generatedCode);
AddContextParameterToGeneratorMethods(generatedCode);
CorrectTypes(generatedCode);
CorrectCoreTypesForBackingStore(generatedCode, $"{conventions.StoreHash}.GetDefaultBackingStoreInstance().CreateBackingStore()");
}, cancellationToken);
}

Expand Down Expand Up @@ -414,9 +416,11 @@ x.Type is CodeType pType &&
"github.com/microsoft/kiota-abstractions-go/serialization", "MergeDeserializersForIntersectionWrapper"),
new (static x => x is CodeProperty prop && prop.IsOfKind(CodePropertyKind.Headers),
"github.com/microsoft/kiota-abstractions-go", "RequestHeaders"),
new (static x => x is CodeProperty prop && prop.IsOfKind(CodePropertyKind.BackingStore), "github.com/microsoft/kiota-abstractions-go/store","BackingStore"),
};//TODO add backing store types once we have them defined
private static void CorrectImplements(ProprietableBlockDeclaration block) {
private void CorrectImplements(ProprietableBlockDeclaration block) {
block.ReplaceImplementByName(KiotaBuilder.AdditionalHolderInterface, "AdditionalDataHolder");
block.ReplaceImplementByName(KiotaBuilder.BackedModelInterface, "BackedModel");
}
private static void CorrectMethodType(CodeMethod currentMethod) {
var parentClass = currentMethod.Parent as CodeClass;
Expand Down
21 changes: 17 additions & 4 deletions src/Kiota.Builder/Writers/Go/CodeMethodWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -387,9 +387,19 @@ private void WriteGetterBody(CodeMethod codeElement, LanguageWriter writer, Code
writer.WriteLines($"value = {codeElement.AccessedProperty.DefaultValue};",
$"m.Set{codeElement.AccessedProperty?.Name?.ToFirstCharacterUpperCase()}(value);");
writer.CloseBlock();
writer.WriteLine("return value;");
} else
writer.WriteLine($"return m.Get{backingStore.Name.ToFirstCharacterUpperCase()}().Get(\"{codeElement.AccessedProperty?.Name?.ToFirstCharacterLowerCase()}\");");
writer.WriteLine("return value");
}
else
{
var returnType = conventions.GetTypeString(codeElement.ReturnType, codeElement.Parent);

writer.WriteLine($"val , err := m.Get{backingStore.Name.ToFirstCharacterUpperCase()}().Get(\"{codeElement.AccessedProperty?.Name?.ToFirstCharacterLowerCase()}\")");

writer.WriteBlock("if val != nil {", "}", $"return val.({returnType})");
writer.WriteBlock("if err != nil {", "}", "panic(err)");

writer.WriteLine("return nil");
}
}
private void WriteApiConstructorBody(CodeClass parentClass, CodeMethod method, LanguageWriter writer) {
var requestAdapterProperty = parentClass.GetPropertyOfKind(CodePropertyKind.RequestAdapter);
Expand Down Expand Up @@ -483,7 +493,10 @@ private static void WriteSetterBody(CodeMethod codeElement, LanguageWriter write
if(backingStore == null)
writer.WriteLine($"m.{codeElement.AccessedProperty?.Name?.ToFirstCharacterLowerCase()} = value");
else
writer.WriteLine($"m.Get{backingStore.Name.ToFirstCharacterUpperCase()}().Set(\"{codeElement.AccessedProperty?.Name?.ToFirstCharacterLowerCase()}\", value)");
{
writer.WriteLine($"err := m.Get{backingStore.Name.ToFirstCharacterUpperCase()}().Set(\"{codeElement.AccessedProperty?.Name?.ToFirstCharacterLowerCase()}\", value)");
writer.WriteBlock("if err != nil {", "}", "panic(err)");
}
}
private void WriteIndexerBody(CodeMethod codeElement, CodeClass parentClass, LanguageWriter writer, string returnType) {
var pathParametersProperty = parentClass.GetPropertyOfKind(CodePropertyKind.PathParameters);
Expand Down
2 changes: 2 additions & 0 deletions src/Kiota.Builder/Writers/Go/GoConventionService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public class GoConventionService : CommonLanguageConventionService
#pragma warning disable CA1822 // Method should be static
public string AbstractionsHash => "i2ae4187f7daee263371cb1c977df639813ab50ffa529013b7437480d1ec0158f";
public string SerializationHash => "i878a80d2330e89d26896388a3f487eef27b0a0e6c010c493bf80be1452208f91";
public string StoreHash => "ie8677ce2c7e1b4c22e9c3827ecd078d41185424dd9eeb92b7d971ed2d49a392e";
public string StringsHash => "ie967d16dae74a49b5e0e051225c5dac0d76e5e38f13dd1628028cbce108c25b6";

public string ContextVarTypeName => "context.Context";
Expand Down Expand Up @@ -94,6 +95,7 @@ public string TranslateType(CodeTypeBase type, bool includeImportSymbol)
"string" or "float32" or "float64" or "int32" or "int64" => type.Name,
"String" or "Int64" or "Int32" or "Float32" or "Float64" => type.Name.ToFirstCharacterLowerCase(), //casing hack
"context.Context" => "context.Context",
"BackedModel" => $"{StoreHash}.BackedModel",
_ => type.Name.ToFirstCharacterUpperCase() ?? "Object",
};
}
Expand Down
7 changes: 7 additions & 0 deletions src/Kiota.Builder/Writers/LanguageWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,13 @@ internal void CloseBlock(string symbol = "}", bool decreaseIndent = true)
WriteLine(symbol);
}

internal void WriteBlock(string startSymbol = "{", string closeSymbol = "}", params string[] lines)
{
StartBlock(startSymbol);
WriteLines(lines);
CloseBlock(closeSymbol);
}

internal void Write(string text, bool includeIndent = true)
{
writer.Write(includeIndent ? GetIndent() + text : text);
Expand Down