public override async Task GenerateWrapperFields(
            FileGeneration fg,
            ObjectGeneration objGen,
            TypeGeneration typeGen,
            Accessor dataAccessor,
            int?currentPosition,
            string passedLengthAccessor,
            DataType dataType = null)
        {
            StringType str  = typeGen as StringType;
            var        data = str.GetFieldData();

            if (data.HasTrigger)
            {
                await base.GenerateWrapperFields(fg, objGen, typeGen, dataAccessor, currentPosition, passedLengthAccessor, dataType);

                return;
            }
            switch (str.BinaryType)
            {
            case StringBinaryType.NullTerminate:
                fg.AppendLine($"public {typeGen.TypeName(getter: true)}{str.NullChar} {typeGen.Name} {{ get; private set; }} = {(str.Translated.HasValue ? $"{nameof(TranslatedString)}.{nameof(TranslatedString.Empty)}" : "string.Empty")};");
                break;

            default:
                await base.GenerateWrapperFields(fg, objGen, typeGen, dataAccessor, currentPosition, passedLengthAccessor, dataType);

                return;
            }
        }
        public override async Task GenerateWrapperUnknownLengthParse(
            FileGeneration fg,
            ObjectGeneration objGen,
            TypeGeneration typeGen,
            int?passedLength,
            string passedLengthAccessor)
        {
            StringType str = typeGen as StringType;

            switch (str.BinaryType)
            {
            case StringBinaryType.PrependLength:
                fg.AppendLine($"ret.{typeGen.Name}EndingPos = {(passedLengthAccessor == null ? null : $"{passedLengthAccessor} + ")}BinaryPrimitives.ReadInt32LittleEndian(ret._data{(passedLengthAccessor == null ? null : $".Slice({passedLengthAccessor})")}) + 4;");
        public override string GenerateForTypicalWrapper(
            ObjectGeneration objGen,
            TypeGeneration typeGen,
            Accessor dataAccessor,
            Accessor packageAccessor)
        {
            StringType str = typeGen as StringType;

            if (str.Translated.HasValue)
            {
                return($"StringBinaryTranslation.Instance.Parse({dataAccessor}, {nameof(StringsSource)}.{str.Translated.Value}, parsingBundle: {packageAccessor}.{nameof(BinaryOverlayFactoryPackage.MetaData)})");
            }
            else
            {
                switch (str.BinaryType)
                {
                case StringBinaryType.Plain:
                case StringBinaryType.NullTerminate:
                    var data     = typeGen.GetFieldData();
                    var gendered = data.Parent as GenderedType;
                    if (data.HasTrigger ||
                        (gendered?.MaleMarker.HasValue ?? false))
                    {
                        return($"{nameof(BinaryStringUtility)}.{nameof(BinaryStringUtility.ProcessWholeToZString)}({dataAccessor}, encoding: {packageAccessor}.{nameof(BinaryOverlayFactoryPackage.MetaData)}.{nameof(ParsingBundle.Encodings)}.{nameof(EncodingBundle.NonTranslated)})");
                    }
                    else
                    {
                        return($"{nameof(BinaryStringUtility)}.{nameof(BinaryStringUtility.ParseUnknownLengthString)}({dataAccessor}, encoding: {packageAccessor}.{nameof(BinaryOverlayFactoryPackage.MetaData)}.{nameof(ParsingBundle.Encodings)}.{nameof(EncodingBundle.NonTranslated)})");
                    }

                case StringBinaryType.PrependLength:
                    return($"{nameof(BinaryStringUtility)}.{nameof(BinaryStringUtility.ParsePrependedString)}({dataAccessor}, lengthLength: 4, encoding: {packageAccessor}.{nameof(BinaryOverlayFactoryPackage.MetaData)}.{nameof(ParsingBundle.Encodings)}.{nameof(EncodingBundle.NonTranslated)})");

                case StringBinaryType.PrependLengthUShort:
                    return($"{nameof(BinaryStringUtility)}.{nameof(BinaryStringUtility.ParsePrependedString)}({dataAccessor}, lengthLength: 2, encoding: {packageAccessor}.{nameof(BinaryOverlayFactoryPackage.MetaData)}.{nameof(ParsingBundle.Encodings)}.{nameof(EncodingBundle.NonTranslated)})");

                default:
                    throw new NotImplementedException();
                }
            }
        }