private IReadOnlyList <MethodSignature> GetMethodSignatures(IComponentProvider provider) { var boolSymbol = _symbols.GetSymbol <bool>(); var intSymbol = _symbols.GetSymbol <int>(); var memberType = _member.ReturnType !.Symbol; // Incoming Data type var discovery = new MethodArg(RefKind.In, provider.DiscoveryType, "parent"); var sourceType = new MethodArg(RefKind.In, _member.ContainingFullType.Symbol, "source"); // Buffers var readOnlySpan = new MethodArg(_symbols.GetSymbol(typeof(ReadOnlySpan <byte>)), "readOnlySpan"); var span = new MethodArg(_symbols.GetSymbol(typeof(Span <byte>)), "span"); var cursor = new MethodArg(RefKind.Ref, _symbols.GetSymbol(typeof(SequenceCursor <byte>)), "cursor"); // Return Data var readBytes = new MethodArg(RefKind.Out, intSymbol, "readBytes"); var writtenBytes = new MethodArg(RefKind.Out, intSymbol, "writtenBytes"); var result = new MethodArg(RefKind.Out, memberType, "result"); return(new MethodSignature[] { MethodSignatureBuilder.CreateConstructor(_typeName, (provider.DiscoveryType, "parser")), MethodSignatureBuilder.CreateConstructor(_typeName, (provider.DiscoveryType, "parser"), (RefKind.Out, boolSymbol, "isSuccess")), MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.TryDeserializeState(0)) .AddArgument(discovery, readOnlySpan, readBytes, result) .WithReturn <bool>(), MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.TryDeserializeState(0)) .AddArgument(discovery, cursor, result) .WithReturn <bool>(), MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.DeserializeState(0)) .AddArgument(discovery, readOnlySpan, result) .WithReturn(memberType), MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.DeserializeState(0)) .AddArgument(discovery, cursor) .WithReturn(memberType), MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.TrySerializeState(0)) .AddArgument(discovery, sourceType, span, writtenBytes) .WithReturn(boolSymbol), MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.SerializeState(0)) .AddArgument(discovery, sourceType, span) .WithReturn(intSymbol), MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.GetLengthState(0)) .AddArgument(discovery, sourceType) .WithReturn(intSymbol) });
public override void GetLength(CodeNodeBuilder node, InArgs <object> target) => node.Return($"{MemberMethod.GetLengthState(0)}({parent}, {target} )");