diff --git a/Directory.Build.props b/Directory.Build.props index 5ec85203..f954c406 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,6 +1,6 @@ - 1.20.1-dev.e639502afb22df4d230d52002b519b3f8ef16b4f - 5.4.2 + 1.21.0-dev.fa7c58ff1072e2d81526c4f414c5e54a265f283f + 5.5.0 diff --git a/Lib9c.Models.Tests/Lib9c.Models.Tests.csproj b/Lib9c.Models.Tests/Lib9c.Models.Tests.csproj index dc23cbb6..27898d19 100644 --- a/Lib9c.Models.Tests/Lib9c.Models.Tests.csproj +++ b/Lib9c.Models.Tests/Lib9c.Models.Tests.csproj @@ -1,7 +1,7 @@ - net6.0 + net8.0 10 enable enable diff --git a/Lib9c.Models/Factories/MailFactory.cs b/Lib9c.Models/Factories/MailFactory.cs index c7f82acb..6b4039ab 100644 --- a/Lib9c.Models/Factories/MailFactory.cs +++ b/Lib9c.Models/Factories/MailFactory.cs @@ -41,6 +41,7 @@ public static Mail Create(IValue bencoded) "sellCancel" => new SellCancelMail(d), "seller" => new SellerMail(d), nameof(UnloadFromMyGaragesRecipientMail) => new UnloadFromMyGaragesRecipientMail(d), + nameof(PatrolRewardMail) => new PatrolRewardMail(d), _ => throw new UnsupportedArgumentValueException("typeId", typeId), }; } diff --git a/Lib9c.Models/Mails/PatrolRewardMail.cs b/Lib9c.Models/Mails/PatrolRewardMail.cs new file mode 100644 index 00000000..c6a11bd0 --- /dev/null +++ b/Lib9c.Models/Mails/PatrolRewardMail.cs @@ -0,0 +1,61 @@ +using Bencodex.Types; +using Lib9c.Models.Exceptions; +using Lib9c.Models.Extensions; +using Libplanet.Types.Assets; +using MongoDB.Bson.Serialization.Attributes; +using ValueKind = Bencodex.Types.ValueKind; + +namespace Lib9c.Models.Mails; + +/// +/// +/// +[BsonIgnoreExtraElements] +public record PatrolRewardMail : Mail +{ + public List FungibleAssetValues { get; init; } + public List<(int id, int count)> Items { get; init; } + + public override IValue Bencoded + { + get + { + var d = (Dictionary)base.Bencoded; + if (FungibleAssetValues.Count != 0) + { + d = d.SetItem("f", new List(FungibleAssetValues + .Select(f => f.Serialize()))); + } + + if (Items.Count != 0) + { + d = d.SetItem("i", new List(Items + .Select(tuple => List.Empty.Add(tuple.id).Add(tuple.count)))); + } + + return d; + } + } + + public PatrolRewardMail(IValue bencoded) : base(bencoded) + { + if (bencoded is not Dictionary d) + { + throw new UnsupportedArgumentTypeException( + nameof(bencoded), + new[] { ValueKind.Dictionary }, + bencoded.Kind); + } + + FungibleAssetValues = d.ContainsKey("f") + ? d["f"].ToList(StateExtensions.ToFungibleAssetValue) + : new List(); + Items = d.ContainsKey("i") + ? d["i"].ToList<(int, int)>(v => + { + var list = (List)v; + return ((Integer)list[0], (Integer)list[1]); + }) + : new List<(int id, int count)>(); + } +} diff --git a/Mimir.Worker/Mimir.Worker.csproj b/Mimir.Worker/Mimir.Worker.csproj index 790a24d0..c80c84fa 100644 --- a/Mimir.Worker/Mimir.Worker.csproj +++ b/Mimir.Worker/Mimir.Worker.csproj @@ -10,7 +10,7 @@ - +