private void GenerateLazyLoader(SourceGeneratorContext context, INamedTypeSymbol type) { var structure = new JsonLazyLoader(type); var code = LazyLoaderGenerator.Generate(structure); context.AddSource($"{type.Name}.Generated.cs", SourceText.From(code, Encoding.UTF8)); }
public static string Generate(JsonLazyLoader lazyLoader) { return($@" using System; using System.Buffers; using System.Text.Json; namespace {lazyLoader.Namespace} {{ {lazyLoader.Accesibility} readonly ref partial struct {lazyLoader.TypeName} {{ private readonly Utf8JsonReader _jsonReader; public readonly bool HasValue {{ get; }} public {lazyLoader.TypeName}(ref Utf8JsonReader jsonReader) {{ HasValue = true; _jsonReader = jsonReader; jsonReader.Skip(); }} public {lazyLoader.LazyType.FullName} Load() {{ var jsonReader = _jsonReader; return {DeserializationGenerator.Generate("jsonReader", lazyLoader.LazyType)}; }} }} }} "); }