|
1 | 1 | // Copyright (c) .NET Foundation and Contributors (https://dotnetfoundation.org/ & https://stride3d.net) and Silicon Studio Corp. (https://www.siliconstudio.co.jp) |
2 | 2 | // Distributed under the MIT license. See the LICENSE.md file in the project root for more information. |
3 | | -using System; |
4 | | -using Stride.Core; |
| 3 | + |
5 | 4 | using Stride.Core.Serialization; |
6 | | -using Stride.Core.Storage; |
7 | 5 |
|
8 | | -namespace Stride.Core.Assets |
| 6 | +namespace Stride.Core.Assets; |
| 7 | + |
| 8 | +[DataContract(nameof(AssetId))] |
| 9 | +[DataSerializer(typeof(Serializer))] |
| 10 | +public readonly struct AssetId : IComparable<AssetId>, IEquatable<AssetId> |
9 | 11 | { |
10 | | - [DataContract("AssetId")] |
11 | | - [DataSerializer(typeof(AssetId.Serializer))] |
12 | | - public struct AssetId : IComparable<AssetId>, IEquatable<AssetId> |
| 12 | + private readonly Guid guid; |
| 13 | + |
| 14 | + public static readonly AssetId Empty = new(); |
| 15 | + |
| 16 | + public AssetId(Guid guid) |
13 | 17 | { |
14 | | - private readonly Guid guid; |
| 18 | + this.guid = guid; |
| 19 | + } |
15 | 20 |
|
16 | | - public static readonly AssetId Empty = new AssetId(); |
| 21 | + public AssetId(string guid) |
| 22 | + { |
| 23 | + this.guid = new Guid(guid); |
| 24 | + } |
17 | 25 |
|
18 | | - public AssetId(Guid guid) |
19 | | - { |
20 | | - this.guid = guid; |
21 | | - } |
| 26 | + public static explicit operator AssetId(Guid guid) |
| 27 | + { |
| 28 | + return new AssetId(guid); |
| 29 | + } |
22 | 30 |
|
23 | | - public AssetId(string guid) |
24 | | - { |
25 | | - this.guid = new Guid(guid); |
26 | | - } |
| 31 | + public static explicit operator Guid(AssetId id) |
| 32 | + { |
| 33 | + return id.guid; |
| 34 | + } |
27 | 35 |
|
28 | | - public static explicit operator AssetId(Guid guid) |
29 | | - { |
30 | | - return new AssetId(guid); |
31 | | - } |
| 36 | + public static AssetId New() |
| 37 | + { |
| 38 | + return new AssetId(Guid.NewGuid()); |
| 39 | + } |
32 | 40 |
|
33 | | - public static explicit operator Guid(AssetId id) |
34 | | - { |
35 | | - return id.guid; |
36 | | - } |
| 41 | + /// <summary> |
| 42 | + /// Implements the ==. |
| 43 | + /// </summary> |
| 44 | + /// <param name="left">The left.</param> |
| 45 | + /// <param name="right">The right.</param> |
| 46 | + /// <returns>The result of the operator.</returns> |
| 47 | + public static bool operator ==(AssetId left, AssetId right) |
| 48 | + { |
| 49 | + return left.Equals(right); |
| 50 | + } |
37 | 51 |
|
38 | | - public static AssetId New() |
39 | | - { |
40 | | - return new AssetId(Guid.NewGuid()); |
41 | | - } |
| 52 | + /// <summary> |
| 53 | + /// Implements the !=. |
| 54 | + /// </summary> |
| 55 | + /// <param name="left">The left.</param> |
| 56 | + /// <param name="right">The right.</param> |
| 57 | + /// <returns>The result of the operator.</returns> |
| 58 | + public static bool operator !=(AssetId left, AssetId right) |
| 59 | + { |
| 60 | + return !left.Equals(right); |
| 61 | + } |
42 | 62 |
|
43 | | - /// <summary> |
44 | | - /// Implements the ==. |
45 | | - /// </summary> |
46 | | - /// <param name="left">The left.</param> |
47 | | - /// <param name="right">The right.</param> |
48 | | - /// <returns>The result of the operator.</returns> |
49 | | - public static bool operator ==(AssetId left, AssetId right) |
50 | | - { |
51 | | - return left.Equals(right); |
52 | | - } |
| 63 | + /// <inheritdoc/> |
| 64 | + public bool Equals(AssetId other) |
| 65 | + { |
| 66 | + return guid == other.guid; |
| 67 | + } |
53 | 68 |
|
54 | | - /// <summary> |
55 | | - /// Implements the !=. |
56 | | - /// </summary> |
57 | | - /// <param name="left">The left.</param> |
58 | | - /// <param name="right">The right.</param> |
59 | | - /// <returns>The result of the operator.</returns> |
60 | | - public static bool operator !=(AssetId left, AssetId right) |
61 | | - { |
62 | | - return !left.Equals(right); |
63 | | - } |
| 69 | + /// <inheritdoc/> |
| 70 | + public override bool Equals(object? obj) |
| 71 | + { |
| 72 | + return obj is AssetId id && Equals(id); |
| 73 | + } |
64 | 74 |
|
65 | | - /// <inheritdoc/> |
66 | | - public bool Equals(AssetId other) |
67 | | - { |
68 | | - return guid == other.guid; |
69 | | - } |
| 75 | + /// <inheritdoc/> |
| 76 | + public override int GetHashCode() |
| 77 | + { |
| 78 | + return guid.GetHashCode(); |
| 79 | + } |
70 | 80 |
|
71 | | - /// <inheritdoc/> |
72 | | - public override bool Equals(object obj) |
73 | | - { |
74 | | - return obj is AssetId id && Equals(id); |
75 | | - } |
| 81 | + /// <inheritdoc/> |
| 82 | + public int CompareTo(AssetId other) |
| 83 | + { |
| 84 | + return guid.CompareTo(other.guid); |
| 85 | + } |
76 | 86 |
|
77 | | - /// <inheritdoc/> |
78 | | - public override int GetHashCode() |
79 | | - { |
80 | | - return guid.GetHashCode(); |
81 | | - } |
| 87 | + public static bool TryParse(string input, out AssetId result) |
| 88 | + { |
| 89 | + var success = Guid.TryParse(input, out var guid); |
| 90 | + result = new AssetId(guid); |
| 91 | + return success; |
| 92 | + } |
82 | 93 |
|
83 | | - /// <inheritdoc/> |
84 | | - public int CompareTo(AssetId other) |
85 | | - { |
86 | | - return guid.CompareTo(other.guid); |
87 | | - } |
| 94 | + public static AssetId Parse(string input) |
| 95 | + { |
| 96 | + return new AssetId(Guid.Parse(input)); |
| 97 | + } |
88 | 98 |
|
89 | | - public static bool TryParse(string input, out AssetId result) |
90 | | - { |
91 | | - Guid guid; |
92 | | - var success = Guid.TryParse(input, out guid); |
93 | | - result = new AssetId(guid); |
94 | | - return success; |
95 | | - } |
| 99 | + /// <inheritdoc/> |
| 100 | + public override string ToString() |
| 101 | + { |
| 102 | + return guid.ToString(); |
| 103 | + } |
96 | 104 |
|
97 | | - public static AssetId Parse(string input) |
98 | | - { |
99 | | - return new AssetId(Guid.Parse(input)); |
100 | | - } |
| 105 | + internal class Serializer : DataSerializer<AssetId> |
| 106 | + { |
| 107 | + private DataSerializer<Guid>? guidSerialier; |
101 | 108 |
|
102 | | - /// <inheritdoc/> |
103 | | - public override string ToString() |
| 109 | + public override void Initialize(SerializerSelector serializerSelector) |
104 | 110 | { |
105 | | - return guid.ToString(); |
| 111 | + base.Initialize(serializerSelector); |
| 112 | + |
| 113 | + guidSerialier = serializerSelector.GetSerializer<Guid>(); |
106 | 114 | } |
107 | 115 |
|
108 | | - internal class Serializer : DataSerializer<AssetId> |
| 116 | + public override void Serialize(ref AssetId obj, ArchiveMode mode, SerializationStream stream) |
109 | 117 | { |
110 | | - private DataSerializer<Guid> guidSerialier; |
111 | | - |
112 | | - public override void Initialize(SerializerSelector serializerSelector) |
113 | | - { |
114 | | - base.Initialize(serializerSelector); |
115 | | - |
116 | | - guidSerialier = serializerSelector.GetSerializer<Guid>(); |
117 | | - } |
118 | | - |
119 | | - public override void Serialize(ref AssetId obj, ArchiveMode mode, SerializationStream stream) |
120 | | - { |
121 | | - var guid = obj.guid; |
122 | | - guidSerialier.Serialize(ref guid, mode, stream); |
123 | | - if (mode == ArchiveMode.Deserialize) |
124 | | - obj = new AssetId(guid); |
125 | | - } |
| 118 | + var guid = obj.guid; |
| 119 | + guidSerialier?.Serialize(ref guid, mode, stream); |
| 120 | + if (mode == ArchiveMode.Deserialize) |
| 121 | + obj = new AssetId(guid); |
126 | 122 | } |
127 | 123 | } |
128 | 124 | } |
0 commit comments