From f958b4081dfaa5391cadfd123293ec248aaa31ed Mon Sep 17 00:00:00 2001
From: Wizou <11647984+wiz0u@users.noreply.github.com>
Date: Mon, 4 Mar 2024 23:54:58 +0100
Subject: [PATCH] Fix properties base implementation
---
EXAMPLES.md | 1 +
src/TL.MTProto.cs | 6 +-
src/TL.Schema.cs | 224 ++++++++++++++++++++++------------------------
src/TL.Secret.cs | 30 +++----
4 files changed, 126 insertions(+), 135 deletions(-)
diff --git a/EXAMPLES.md b/EXAMPLES.md
index 5e7ca9d..57b461d 100644
--- a/EXAMPLES.md
+++ b/EXAMPLES.md
@@ -463,6 +463,7 @@ into either a `User` or `ChatBase` (`Chat`,`Channel`...) description structure *
You can also use the `CollectUsersChats` helper method to collect these 2 fields into 2 aggregate dictionaries to remember details
*(including access hashes)* about all the users/chats you've encountered so far.
+This method also helps dealing with [incomplete `min` structures](https://core.telegram.org/api/min).
Example of usage:
```csharp
diff --git a/src/TL.MTProto.cs b/src/TL.MTProto.cs
index d6313b1..fa8754c 100644
--- a/src/TL.MTProto.cs
+++ b/src/TL.MTProto.cs
@@ -160,9 +160,9 @@ namespace TL
public abstract class MsgDetailedInfoBase : IObject
{
- public virtual long AnswerMsgId { get; }
- public virtual int Bytes { get; }
- public virtual int Status { get; }
+ public virtual long AnswerMsgId => default;
+ public virtual int Bytes => default;
+ public virtual int Status => default;
}
[TLDef(0x276D3EC6)] //msg_detailed_info#276d3ec6 msg_id:long answer_msg_id:long bytes:int status:int = MsgDetailedInfo
public class MsgDetailedInfo : MsgDetailedInfoBase
diff --git a/src/TL.Schema.cs b/src/TL.Schema.cs
index 045905a..7e7e52a 100644
--- a/src/TL.Schema.cs
+++ b/src/TL.Schema.cs
@@ -133,11 +133,11 @@ namespace TL
public abstract partial class InputFileBase : IObject
{
/// Random file identifier created by the client
- public virtual long ID { get; set; }
+ public abstract long ID { get; set; }
/// Number of parts saved
- public virtual int Parts { get; set; }
+ public abstract int Parts { get; set; }
/// Full name of the file
- public virtual string Name { get; set; }
+ public abstract string Name { get; set; }
}
/// Defines a file saved in parts using the method Upload_SaveFilePart. See
[TLDef(0xF52FF27F)]
@@ -948,9 +948,9 @@ namespace TL
public abstract partial class ChatBase : IObject
{
/// ID of the group
- public virtual long ID { get; }
+ public virtual long ID => default;
/// Title
- public virtual string Title { get; }
+ public virtual string Title => default;
}
/// Empty constructor, group doesn't exist See
[TLDef(0x29562865)]
@@ -1189,35 +1189,35 @@ namespace TL
public abstract partial class ChatFullBase : IObject
{
/// ID of the chat
- public virtual long ID { get; }
+ public virtual long ID => default;
/// About string for this chat
- public virtual string About { get; }
+ public virtual string About => default;
/// Chat photo
- public virtual PhotoBase ChatPhoto { get; }
+ public virtual PhotoBase ChatPhoto => default;
/// Notification settings
- public virtual PeerNotifySettings NotifySettings { get; }
+ public virtual PeerNotifySettings NotifySettings => default;
/// Chat invite
- public virtual ExportedChatInvite ExportedInvite { get; }
+ public virtual ExportedChatInvite ExportedInvite => default;
/// Info about bots that are in this chat
- public virtual BotInfo[] BotInfo { get; }
+ public virtual BotInfo[] BotInfo => default;
/// Message ID of the last pinned message
- public virtual int PinnedMsg { get; }
+ public virtual int PinnedMsg => default;
/// Peer folder ID, for more info click here
- public virtual int Folder { get; }
+ public virtual int Folder => default;
/// Group call information
- public virtual InputGroupCall Call { get; }
+ public virtual InputGroupCall Call => default;
/// Time-To-Live of messages sent by the current user to this chat
- public virtual int TtlPeriod { get; }
+ public virtual int TtlPeriod => default;
/// When using Phone_GetGroupCallJoinAs to get a list of peers that can be used to join a group call, this field indicates the peer that should be selected by default.
- public virtual Peer GroupcallDefaultJoinAs { get; }
+ public virtual Peer GroupcallDefaultJoinAs => default;
/// Emoji representing a specific chat theme
- public virtual string ThemeEmoticon { get; }
+ public virtual string ThemeEmoticon => default;
/// Pending join requests »
- public virtual int RequestsPending { get; }
+ public virtual int RequestsPending => default;
/// IDs of users who requested to join recently
- public virtual long[] RecentRequesters { get; }
+ public virtual long[] RecentRequesters => default;
/// Allowed message reactions »
- public virtual ChatReactions AvailableReactions { get; }
+ public virtual ChatReactions AvailableReactions => default;
}
/// Full info about a basic group. See
[TLDef(0xC9D31138)]
@@ -1535,7 +1535,7 @@ namespace TL
public abstract partial class ChatParticipantBase : IObject
{
/// Member user ID
- public virtual long UserId { get; }
+ public virtual long UserId => default;
}
/// Group member. See
[TLDef(0xC02D4007)]
@@ -1571,7 +1571,7 @@ namespace TL
public abstract partial class ChatParticipantsBase : IObject
{
/// Group ID
- public virtual long ChatId { get; }
+ public virtual long ChatId => default;
}
/// Info on members is unavailable See
[TLDef(0x8763D3E1)]
@@ -1635,17 +1635,17 @@ namespace TL
public abstract class MessageBase : IObject
{
/// ID of the message
- public virtual int ID { get; }
+ public virtual int ID => default;
/// ID of the sender of the message
- public virtual Peer From { get; }
+ public virtual Peer From => default;
/// Peer ID, the chat where this message was sent
- public virtual Peer Peer { get; }
+ public virtual Peer Peer => default;
/// Reply information
- public virtual MessageReplyHeaderBase ReplyTo { get; }
+ public virtual MessageReplyHeaderBase ReplyTo => default;
/// Date of the message
- public virtual DateTime Date { get; }
+ public virtual DateTime Date => default;
/// Time To Live of the message, once message.date+message.ttl_period === time(), the message will be deleted on the server, and must be deleted locally as well.
- public virtual int TtlPeriod { get; }
+ public virtual int TtlPeriod => default;
}
/// Empty constructor, non-existent message. See
[TLDef(0x90A6CA84)]
@@ -2606,9 +2606,9 @@ namespace TL
public abstract class DialogBase : IObject
{
/// The chat
- public virtual Peer Peer { get; }
+ public virtual Peer Peer => default;
/// The latest message ID
- public virtual int TopMessage { get; }
+ public virtual int TopMessage => default;
}
/// Chat See
[TLDef(0xD58A08C6)]
@@ -2740,7 +2740,7 @@ namespace TL
public abstract partial class PhotoSizeBase : IObject
{
/// Thumbnail type »
- public virtual string Type { get; }
+ public virtual string Type => default;
}
/// Empty constructor. Image with this thumbnail is unavailable. See
[TLDef(0x0E17E23C)]
@@ -3102,9 +3102,9 @@ namespace TL
public abstract partial class WallPaperBase : IObject
{
/// Identifier
- public virtual long ID { get; }
+ public virtual long ID => default;
/// Info on how to generate the wallpaper, according to these instructions ».
- public virtual WallPaperSettings Settings { get; }
+ public virtual WallPaperSettings Settings => default;
}
/// Represents a wallpaper based on an image. See
[TLDef(0xA437C3ED)]
@@ -3380,9 +3380,9 @@ namespace TL
public abstract partial class Messages_DialogsBase : IObject, IPeerResolver
{
/// List of chats
- public virtual DialogBase[] Dialogs { get; }
+ public virtual DialogBase[] Dialogs => default;
/// List of last messages from each chat
- public virtual MessageBase[] Messages { get; }
+ public virtual MessageBase[] Messages => default;
/// returns a or for the given Peer
public abstract IPeerInfo UserOrChat(Peer peer);
}
@@ -3427,7 +3427,7 @@ namespace TL
public abstract partial class Messages_MessagesBase : IObject, IPeerResolver
{
/// List of messages
- public virtual MessageBase[] Messages { get; }
+ public virtual MessageBase[] Messages => default;
/// returns a or for the given Peer
public abstract IPeerInfo UserOrChat(Peer peer);
}
@@ -3544,13 +3544,9 @@ namespace TL
}
/// Affected part of communication history with the user or in a chat. See
- [TLDef(0xB45C69D1)]
- public class Messages_AffectedHistory : IObject
+ [TLDef(0xB45C69D1, inheritBefore = true)]
+ public class Messages_AffectedHistory : Messages_AffectedMessages
{
- /// Number of events occurred in a text box
- public int pts;
- /// Number of affected events
- public int pts_count;
/// If a parameter contains positive value, it is necessary to repeat the method call using the given value; during the proceeding of all the history the value itself shall gradually decrease
public int offset;
}
@@ -5170,11 +5166,11 @@ namespace TL
public abstract partial class Updates_DifferenceBase : IObject, IPeerResolver
{
/// List of new messages
- public virtual MessageBase[] NewMessages { get; }
+ public virtual MessageBase[] NewMessages => default;
/// List of new encrypted secret chat messages
- public virtual EncryptedMessageBase[] NewEncryptedMessages { get; }
+ public virtual EncryptedMessageBase[] NewEncryptedMessages => default;
/// List of updates
- public virtual Update[] OtherUpdates { get; }
+ public virtual Update[] OtherUpdates => default;
/// returns a or for the given Peer
public abstract IPeerInfo UserOrChat(Peer peer);
}
@@ -5259,7 +5255,7 @@ namespace TL
public abstract partial class UpdatesBase : IObject, IPeerResolver
{
/// date
- public virtual DateTime Date { get; }
+ public virtual DateTime Date => default;
/// returns a or for the given Peer
public abstract IPeerInfo UserOrChat(Peer peer);
}
@@ -5752,15 +5748,15 @@ namespace TL
public abstract class EncryptedChatBase : IObject
{
/// Chat ID
- public virtual int ID { get; }
+ public virtual int ID => default;
/// Checking sum depending on user ID
- public virtual long AccessHash { get; }
+ public virtual long AccessHash => default;
/// Date of chat creation
- public virtual DateTime Date { get; }
+ public virtual DateTime Date => default;
/// Chat creator ID
- public virtual long AdminId { get; }
+ public virtual long AdminId => default;
/// ID of second chat participant
- public virtual long ParticipantId { get; }
+ public virtual long ParticipantId => default;
}
/// Empty constructor. See
[TLDef(0xAB7EC0A0)]
@@ -5917,7 +5913,7 @@ namespace TL
public abstract class InputEncryptedFileBase : IObject
{
/// Random file ID created by client
- public virtual long ID { get; set; }
+ public abstract long ID { get; set; }
}
/// Sets new encrypted file saved by parts using upload.saveFilePart method. See
[TLDef(0x64BD0306)]
@@ -5966,13 +5962,13 @@ namespace TL
public abstract class EncryptedMessageBase : IObject
{
/// Random message ID, assigned by the author of message
- public virtual long RandomId { get; }
+ public virtual long RandomId => default;
/// ID of encrypted chat
- public virtual int ChatId { get; }
+ public virtual int ChatId => default;
/// Date of sending
- public virtual DateTime Date { get; }
+ public virtual DateTime Date => default;
/// TL-serialization of type, encrypted with the key created at chat initialization
- public virtual byte[] Bytes { get; }
+ public virtual byte[] Bytes => default;
}
/// Encrypted message. See
[TLDef(0xED18C118)]
@@ -6593,9 +6589,9 @@ namespace TL
public abstract class WebPageBase : IObject
{
/// Preview ID
- public virtual long ID { get; }
+ public virtual long ID => default;
/// URL of the webpage.
- public virtual string Url { get; }
+ public virtual string Url => default;
}
/// No preview is available for the webpage See
[TLDef(0x211A1788)]
@@ -7191,7 +7187,7 @@ namespace TL
public abstract class KeyboardButtonBase : IObject
{
/// Button text
- public virtual string Text { get; }
+ public virtual string Text => default;
}
/// Bot keyboard button See
[TLDef(0xA2FA4880)]
@@ -7554,7 +7550,7 @@ namespace TL
public abstract class InputChannelBase : IObject
{
/// Channel ID
- public virtual long ChannelId { get; set; }
+ public abstract long ChannelId { get; set; }
}
/// Represents a channel See
[TLDef(0xF35AEC28)]
@@ -8151,9 +8147,9 @@ namespace TL
public abstract class InputBotInlineResultBase : IObject
{
/// ID of result
- public virtual string ID { get; set; }
+ public abstract string ID { get; set; }
/// Message to send when the result is selected
- public virtual InputBotInlineMessage SendMessage { get; set; }
+ public abstract InputBotInlineMessage SendMessage { get; set; }
}
/// An inline bot result See
[TLDef(0x88BF9319)]
@@ -8462,15 +8458,15 @@ namespace TL
public abstract class BotInlineResultBase : IObject
{
/// Result ID
- public virtual string ID { get; }
+ public virtual string ID => default;
/// Result type (see bot API docs)
- public virtual string Type { get; }
+ public virtual string Type => default;
/// Result title
- public virtual string Title { get; }
+ public virtual string Title => default;
/// Result description
- public virtual string Description { get; }
+ public virtual string Description => default;
/// Message to send
- public virtual BotInlineMessage SendMessage { get; }
+ public virtual BotInlineMessage SendMessage => default;
}
/// Generic result See
[TLDef(0x11965F3A)]
@@ -8834,9 +8830,9 @@ namespace TL
public abstract class InputBotInlineMessageIDBase : IObject
{
/// DC ID to use when working with this inline message
- public virtual int DcId { get; set; }
+ public abstract int DcId { get; set; }
/// Access hash of message
- public virtual long AccessHash { get; set; }
+ public abstract long AccessHash { get; set; }
}
/// Represents a sent inline message from the perspective of a bot (legacy constructor) See
[TLDef(0x890C3D89)]
@@ -9086,7 +9082,7 @@ namespace TL
public abstract class StickerSetCoveredBase : IObject
{
/// Stickerset
- public virtual StickerSet Set { get; }
+ public virtual StickerSet Set => default;
}
/// Stickerset with a single sticker as preview See
[TLDef(0x6410A5D2)]
@@ -9821,13 +9817,13 @@ namespace TL
public abstract partial class WebDocumentBase : IObject
{
/// Document URL
- public virtual string Url { get; }
+ public virtual string Url => default;
/// File size
- public virtual int Size { get; }
+ public virtual int Size => default;
/// MIME type
- public virtual string MimeType { get; }
+ public virtual string MimeType => default;
/// Attributes for media types
- public virtual DocumentAttribute[] Attributes { get; }
+ public virtual DocumentAttribute[] Attributes => default;
}
/// Remote document See
[TLDef(0x1C570ED1)]
@@ -10216,17 +10212,17 @@ namespace TL
public abstract partial class PhoneCallBase : IObject
{
/// Call ID
- public virtual long ID { get; }
+ public virtual long ID => default;
/// Access hash
- public virtual long AccessHash { get; }
+ public virtual long AccessHash => default;
/// Date
- public virtual DateTime Date { get; }
+ public virtual DateTime Date => default;
/// Admin ID
- public virtual long AdminId { get; }
+ public virtual long AdminId => default;
/// Participant ID
- public virtual long ParticipantId { get; }
+ public virtual long ParticipantId => default;
/// Phone call protocol info
- public virtual PhoneCallProtocol Protocol { get; }
+ public virtual PhoneCallProtocol Protocol => default;
}
/// Empty constructor See
[TLDef(0x5366C915)]
@@ -10443,13 +10439,13 @@ namespace TL
public abstract class PhoneConnectionBase : IObject
{
/// Endpoint ID
- public virtual long ID { get; }
+ public virtual long ID => default;
/// IP address of endpoint
- public virtual string Ip { get; }
+ public virtual string Ip => default;
/// IPv6 address of endpoint
- public virtual string Ipv6 { get; }
+ public virtual string Ipv6 => default;
/// Port ID
- public virtual int Port { get; }
+ public virtual int Port => default;
}
/// Identifies an endpoint that can be used to connect to the other user in a phone call See
[TLDef(0x9CC123C7)]
@@ -10591,7 +10587,7 @@ namespace TL
public abstract class LangPackStringBase : IObject
{
/// Language key
- public virtual string Key { get; }
+ public virtual string Key => default;
}
/// Translated localization string See
[TLDef(0xCAD181F6)]
@@ -11415,7 +11411,7 @@ namespace TL
public abstract class InputSecureFileBase : IObject
{
/// Secure file ID
- public virtual long ID { get; set; }
+ public abstract long ID { get; set; }
}
/// Uploaded secure file, for more info see the passport docs » See
[TLDef(0x3334B0F0)]
@@ -11629,9 +11625,9 @@ namespace TL
public abstract class SecureValueErrorBase : IObject
{
/// The section of the user's Telegram Passport which has the error, one of , , , , ,
- public virtual SecureValueType Type { get; }
+ public virtual SecureValueType Type => default;
/// Error message
- public virtual string Text { get; }
+ public virtual string Text => default;
}
/// Represents an issue in one of the data fields that was provided by the user. The error is considered resolved when the field's value changes. See
[TLDef(0xE8A40BD9)]
@@ -12704,7 +12700,7 @@ namespace TL
public abstract class PeerLocatedBase : IObject
{
/// Validity period of current data
- public virtual DateTime Expires { get; }
+ public virtual DateTime Expires => default;
}
/// Peer geolocated nearby See
[TLDef(0xCA461B5D)]
@@ -13042,15 +13038,15 @@ namespace TL
public abstract class DialogFilterBase : IObject
{
/// Folder ID
- public virtual int ID { get; }
+ public virtual int ID => default;
/// Folder name
- public virtual string Title { get; }
+ public virtual string Title => default;
/// Emoji to use as icon for the folder.
- public virtual string Emoticon { get; }
+ public virtual string Emoticon => default;
/// Pinned chats, folders can have unlimited pinned chats
- public virtual InputPeer[] PinnedPeers { get; }
+ public virtual InputPeer[] PinnedPeers => default;
/// Include the following chats in this folder
- public virtual InputPeer[] IncludePeers { get; }
+ public virtual InputPeer[] IncludePeers => default;
}
/// Dialog filter AKA folder See
[TLDef(0x7438F7E8)]
@@ -13693,9 +13689,9 @@ namespace TL
public abstract partial class GroupCallBase : IObject
{
/// Group call ID
- public virtual long ID { get; }
+ public virtual long ID => default;
/// Group call access hash
- public virtual long AccessHash { get; }
+ public virtual long AccessHash => default;
}
/// An ended group call See
[TLDef(0x7780BCB4)]
@@ -13932,15 +13928,9 @@ namespace TL
}
/// Messages found and affected by changes See
- [TLDef(0xEF8D3E6C)]
- public class Messages_AffectedFoundMessages : IObject
+ [TLDef(0xEF8D3E6C, inheritBefore = true)]
+ public class Messages_AffectedFoundMessages : Messages_AffectedHistory
{
- /// Event count after generation
- public int pts;
- /// Number of events that were generated
- public int pts_count;
- /// If bigger than zero, the request must be repeated to remove more messages
- public int offset;
/// Affected message IDs
public int[] messages;
}
@@ -13989,9 +13979,9 @@ namespace TL
public abstract class Messages_ExportedChatInviteBase : IObject
{
/// Info about the chat invite
- public virtual ExportedChatInvite Invite { get; }
+ public virtual ExportedChatInvite Invite => default;
/// Mentioned users
- public virtual Dictionary Users { get; }
+ public virtual Dictionary Users => default;
}
/// Info about a chat invite See
[TLDef(0x1871BE50)]
@@ -15215,7 +15205,7 @@ namespace TL
public abstract class ForumTopicBase : IObject
{
/// The ID of the deleted forum topic.
- public virtual int ID { get; }
+ public virtual int ID => default;
}
/// Represents a deleted forum topic. See
[TLDef(0x023F109B)]
@@ -15681,9 +15671,9 @@ namespace TL
public abstract class Chatlists_ChatlistInviteBase : IObject
{
/// Related chat information
- public virtual Dictionary Chats { get; }
+ public virtual Dictionary Chats => default;
/// Related user information
- public virtual Dictionary Users { get; }
+ public virtual Dictionary Users => default;
}
/// Updated info about a chat folder deep link » we already imported. See
[TLDef(0xFA87F659)]
@@ -15768,9 +15758,9 @@ namespace TL
public abstract class MessagePeerVoteBase : IObject
{
/// Peer ID
- public virtual Peer Peer { get; }
+ public virtual Peer Peer => default;
/// When did the peer cast the vote
- public virtual DateTime Date { get; }
+ public virtual DateTime Date => default;
}
/// How a peer voted in a poll See
[TLDef(0xB6CC2D5C)]
@@ -15875,7 +15865,7 @@ namespace TL
public abstract class StoryItemBase : IObject
{
/// Story ID
- public virtual int ID { get; }
+ public virtual int ID => default;
}
/// Represents a previously active story, that was deleted See
[TLDef(0x51E6EE4F)]
@@ -16437,7 +16427,7 @@ namespace TL
public abstract class Payments_GiveawayInfoBase : IObject
{
/// When was the giveaway started
- public virtual DateTime StartDate { get; }
+ public virtual DateTime StartDate => default;
}
/// Contains info about an ongoing giveaway. See
[TLDef(0x4367DAA0)]
@@ -16921,13 +16911,13 @@ namespace TL
public abstract class Messages_SavedDialogsBase : IObject
{
/// Saved message dialogs ».
- public virtual SavedDialog[] Dialogs { get; }
+ public virtual SavedDialog[] Dialogs => default;
/// List of last messages from each saved dialog
- public virtual MessageBase[] Messages { get; }
+ public virtual MessageBase[] Messages => default;
/// Mentioned chats
- public virtual Dictionary Chats { get; }
+ public virtual Dictionary Chats => default;
/// Mentioned users
- public virtual Dictionary Users { get; }
+ public virtual Dictionary Users => default;
}
/// Represents some saved message dialogs ». See
[TLDef(0xF83AE221)]
diff --git a/src/TL.Secret.cs b/src/TL.Secret.cs
index 3e31293..6028014 100644
--- a/src/TL.Secret.cs
+++ b/src/TL.Secret.cs
@@ -7,32 +7,32 @@ namespace TL
public abstract class DecryptedMessageBase : IObject
{
/// Flags, see TL conditional fields (added in layer 45)
- public virtual uint FFlags { get; }
+ public virtual uint FFlags => default;
/// Random message ID, assigned by the author of message.
Must be equal to the ID passed to sending method.
- public virtual long RandomId { get; }
+ public virtual long RandomId => default;
/// Message lifetime. Has higher priority than .
Parameter added in Layer 17.
- public virtual int Ttl { get; }
+ public virtual int Ttl => default;
/// Message text
- public virtual string Message { get; }
+ public virtual string Message => default;
/// Media content
- public virtual DecryptedMessageMedia Media { get; }
+ public virtual DecryptedMessageMedia Media => default;
/// Message entities for styled text (parameter added in layer 45)
- public virtual MessageEntity[] Entities { get; }
+ public virtual MessageEntity[] Entities => default;
/// Specifies the ID of the inline bot that generated the message (parameter added in layer 45)
- public virtual string ViaBotName { get; }
+ public virtual string ViaBotName => default;
/// Random message ID of the message this message replies to (parameter added in layer 45)
- public virtual long ReplyToRandom { get; }
+ public virtual long ReplyToRandom => default;
/// Random group ID, assigned by the author of message.
Multiple encrypted messages with a photo attached and with the same group ID indicate an album or grouped media (parameter added in layer 45)
- public virtual long Grouped { get; }
- public virtual byte[] RandomBytes { get; }
- public virtual DecryptedMessageAction Action { get; }
+ public virtual long Grouped => default;
+ public virtual byte[] RandomBytes => default;
+ public virtual DecryptedMessageAction Action => default;
}
/// Object describes media contents of an encrypted message. See
/// a value means decryptedMessageMediaEmpty
public abstract class DecryptedMessageMedia : IObject
{
- public virtual string MimeType { get; }
+ public virtual string MimeType => default;
internal virtual (long size, byte[] key, byte[] iv) SizeKeyIV { get => default; set => throw new WTelegram.WTException("Incompatible DecryptedMessageMedia"); }
}
@@ -43,11 +43,11 @@ namespace TL
public abstract class FileLocationBase : IObject
{
/// Server volume
- public virtual long VolumeId { get; }
+ public virtual long VolumeId => default;
/// File ID
- public virtual int LocalId { get; }
+ public virtual int LocalId => default;
/// Checksum to access the file
- public virtual long Secret { get; }
+ public virtual long Secret => default;
}
namespace Layer8