Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
AssetReferenceSerializer.cs
Go to the documentation of this file.
1 // Copyright (c) 2014 Silicon Studio Corp. (http://siliconstudio.co.jp)
2 // This file is distributed under GPL v3. See LICENSE.md for details.
3 using System;
4 using SharpYaml;
5 using SharpYaml.Events;
6 using SharpYaml.Serialization;
7 
8 using SiliconStudio.Core;
9 using SiliconStudio.Core.Yaml;
10 
11 namespace SiliconStudio.Assets.Serializers
12 {
13  /// <summary>
14  /// A Yaml serializer for <see cref="AssetReference"/>
15  /// </summary>
16  [YamlSerializerFactory]
17  internal class AssetReferenceSerializer : AssetScalarSerializerBase
18  {
19  public override bool CanVisit(Type type)
20  {
21  return typeof(AssetReference).IsAssignableFrom(type);
22  }
23 
24  public override object ConvertFrom(ref ObjectContext context, Scalar fromScalar)
25  {
26  AssetReference assetReference;
27  if (!AssetReference.TryParse(context.Descriptor.Type, fromScalar.Value, out assetReference))
28  {
29  throw new YamlException(fromScalar.Start, fromScalar.End, "Unable to decode asset reference [{0}]. Expecting format GUID:LOCATION".ToFormat(fromScalar.Value));
30  }
31  return assetReference;
32  }
33 
34  public override string ConvertTo(ref ObjectContext objectContext)
35  {
36  return objectContext.Instance.ToString();
37  }
38  }
39 }