{"id":19991091,"url":"https://github.com/symbolspace/Symbol","last_synced_at":"2025-05-04T10:31:07.980Z","repository":{"id":44334490,"uuid":"158569556","full_name":"symbolspace/Symbol","owner":"symbolspace","description":"Symbol .net library","archived":false,"fork":false,"pushed_at":"2024-03-08T07:48:27.000Z","size":993,"stargazers_count":17,"open_issues_count":0,"forks_count":1,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-06T13:06:19.654Z","etag":null,"topics":["api","cloud","image-recognition","json","netcore","socket","symbol","verifycode","web"],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/symbolspace.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2018-11-21T15:33:01.000Z","updated_at":"2024-04-09T20:13:29.000Z","dependencies_parsed_at":"2024-03-08T08:48:35.649Z","dependency_job_id":"828ab087-5141-4969-9738-8219d3b83f3d","html_url":"https://github.com/symbolspace/Symbol","commit_stats":{"total_commits":142,"total_committers":3,"mean_commits":"47.333333333333336","dds":0.09859154929577463,"last_synced_commit":"1156cf398d00294c68808427a8186c7d8546d59b"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/symbolspace%2FSymbol","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/symbolspace%2FSymbol/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/symbolspace%2FSymbol/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/symbolspace%2FSymbol/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/symbolspace","download_url":"https://codeload.github.com/symbolspace/Symbol/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250386745,"owners_count":21422026,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","cloud","image-recognition","json","netcore","socket","symbol","verifycode","web"],"created_at":"2024-11-13T04:51:36.588Z","updated_at":"2025-05-04T10:31:05.339Z","avatar_url":"https://github.com/symbolspace.png","language":"C#","funding_links":[],"categories":["C\\#"],"sub_categories":[],"readme":"# Symbol project\n\n## Download\n* Symbol.dll [![Available on NuGet https://www.nuget.org/packages/Symbol/](https://img.shields.io/nuget/v/Symbol.svg?style=flat)](https://www.nuget.org/packages/Symbol/)\n* Symbol.Net.dll [![Available on NuGet https://www.nuget.org/packages/Symbol.Net/](https://img.shields.io/nuget/v/Symbol.Net.svg?style=flat)](https://www.nuget.org/packages/Symbol.Net/)\n* Symbol.Web.dll [![Available on NuGet https://www.nuget.org/packages/Symbol.Web/](https://img.shields.io/nuget/v/Symbol.Web.svg?style=flat)](https://www.nuget.org/packages/Symbol.Web/) \n* Symbol.Logger.NLog.dll [![Available on NuGet https://www.nuget.org/packages/Symbol.Logger.Serilog/](https://img.shields.io/nuget/v/Symbol.Logger.NLog.svg?style=flat)](https://www.nuget.org/packages/Symbol.Logger.NLog/)\n* Symbol.Logger.Serilog.dll [![Available on NuGet https://www.nuget.org/packages/Symbol.Logger.Serilog/](https://img.shields.io/nuget/v/Symbol.Logger.Serilog.svg?style=flat)](https://www.nuget.org/packages/Symbol.Logger.Serilog/)\n\n## Release Notes   [More](https://github.com/symbolspace/Symbol/wiki/Version-history)\n\n## Iteration plan\n* Symbol.Cloud 移植；\n* Symbol.Cloud 微服务家族；\n* Symbol.Cloud 多种实现方式；\n\n\n## Support runtime\n* .net framework 2.0;\n* .net framework 3.5;\n* .net framework 4.0;\n* .net framework 4.5;\n* .net framework 4.5.2;\n* .net framework 4.6;\n* .net framework 4.6.1;\n* .net framework 4.7;\n* .net framework 4.8;\n* .net standard 2.0\n* .net core app 3.1;\n* .net 5.0;\n* .net 6.0;\n* .net 7.0;\n* .net 8.0;\n\n\n## Wiki\n* [Symbol.dll](https://github.com/symbolspace/Symbol/wiki/Symbol.dll)\n* [Symbol.Data.dll](https://github.com/symbolspace/Symbol/wiki/Symbol.Data.dll)\n* [Symbol.Net.dll](https://github.com/symbolspace/Symbol/wiki/Symbol.Net.dll)\n* [Symbol.Web.dll](https://github.com/symbolspace/Symbol/wiki/Symbol.Web.dll)\n* [Symbol.Drawing.dll](https://github.com/symbolspace/Symbol/wiki/Symbol.Drawing.dll)\n* [Symbol.IO.Packing.TreePackage.dll](https://github.com/symbolspace/Symbol/wiki/Symbol.IO.Packing.TreePackage.dll)\n* [Symbol.ImageRecognition.Verification.dll](https://github.com/symbolspace/Symbol/wiki/Symbol.ImageRecognition.Verification.dll)\n\n\n## Contribute\nWe gladly accept community contributions.\n* Issues: Please report bugs using the Issues section of GitHub\n* Source Code Contributions:\n* See [C# Coding Style](https://github.com/symbolspace/Symbol/wiki/C%23-Coding-Style) for reference on coding style.\n\n\n## 静态扩展：Type判断\n\u003e *TypeExtensions*\n\n### 判断是否为可为空类型，比如int?这种类型\n\u003e *public static bool IsNullableType(this Type type)* \u003cbr\u003e\n\u003e 返回为true表示此类型为struct类型，并且采用的是Nullable\u0026lt;T\u0026gt;。\n\n```csharp\nConsole.WriteLine(  typeof(bool).IsNullableType()  );\nConsole.WriteLine(  typeof(bool?).IsNullableType()  );\nConsole.WriteLine(  typeof(string).IsNullableType()  );\n/*\nFalse\nTrue\nFalse\n*/\n```\n\n### 获取可为空类型的原始类型\n\u003e *public static Type GetNullableType(this Type type)* \u003cbr\u003e\n\u003e 如果为非可为空类型，返回的就是它自己，反之而是被包装的类型。\n\n```csharp\nConsole.WriteLine(  typeof(bool).GetNullableType().FullName  );\nConsole.WriteLine(  typeof(bool?).GetNullableType().FullName  );\nConsole.WriteLine(  typeof(string).GetNullableType().FullName  );\n/*\nSystem.Boolean\nSystem.Boolean\nSystem.String\n*/\n```\n\n### 是否为匿名类型\n\u003e *public static bool IsAnonymousType(this object value)* \u003cbr\u003e\n\u003e *public static bool IsAnonymousType(this Type type)* \u003cbr\u003e\n\u003e 为null返回false，反之为匿名对象时返回true。\n\n```csharp\nvar builder = new StringBuilder();\nvar info = new { name = \"test\" };\n\nConsole.WriteLine(  builder.IsAnonymousType()  );\nConsole.WriteLine(  info.IsAnonymousType()  );\nConsole.WriteLine(  typeof(string).IsAnonymousType()  );\n/*\nFalse\nTrue\nTrue\n*/\n```\n\n### 是否为系统基础类型\n\u003e *public static bool IsSystemBaseType(this Type type)* \u003cbr\u003e\n\u003e 为true表示为基础类型，比如string int。\n\n```csharp\nConsole.WriteLine(  typeof(int).IsSystemBaseType()  );\nConsole.WriteLine(  typeof(Program).IsSystemBaseType()  );\n/*\nTrue\nFalse\n*/\n```\n\n### 是否为数字类型\n\u003e *public static bool IsNumbericType(this Type type)* \u003cbr\u003e\n\u003e 为null时返回false，反之为数字类型时返回为true。 \u003cbr\u003e\n\u003e 已知：byte,short,int,uint,long,ulong,float,decimal,double \u003cbr\u003e\n\u003e      byte?,short?,int?,uint?,long?,ulong?,float?,decimal?,double?\n\n```csharp\nConsole.WriteLine(  typeof(int).IsNumbericType()  );\nConsole.WriteLine(  typeof(string).IsNumbericType()  );\nConsole.WriteLine(  \"test\".IsNumbericType()  );\nConsole.WriteLine(  (3.42F).IsNumbericType()  );\n/*\nTrue\nFalse\nFalse\nTrue\n*/\n```\n\n### 判断两个类型是否有继承关系。\n\u003e *public static bool IsInheritFrom(this Type type, Type parent)* \u003cbr\u003e\n\u003e 支持接口、类，返回true表示有继承关系。\n```csharp\n\ninterface IBase{ }\ninterface IFly : IBase { }\nclass Birds: IFly {  }\nclass Pigeon : Birds {  }\nclass Fish : IBase { }\nstatic void Main()\n{\n    Console.WriteLine(  typeof(Pigeon).IsInheritFrom(  typeof(Birds)  )  );\n    Console.WriteLine(  typeof(Pigeon).IsInheritFrom(  typeof(IFly)  )  );\n    Console.WriteLine(  typeof(Pigeon).IsInheritFrom(  typeof(IBase)  )  );\n    Console.WriteLine(  typeof(Fish).IsInheritFrom(  typeof(IBase)  )  );\n    Console.WriteLine(  typeof(Fish).IsInheritFrom(  typeof(Birds)  )  );\n    Console.WriteLine(  typeof(IFly).IsInheritFrom(  typeof(IBase)  )  );\n}\n/*\nTrue\nTrue\nTrue\nTrue\nFalse\nTrue\n*/\n```\n\n## 静态扩展：值转换\n\u003e *ConvertExtensions*\n\n### 强制转换为另一个类型（仅限struct类型）\n\u003e *public static T Convert\u003cT\u003e(this object value, T defaultValue) where T : struct* \u003cbr\u003e\n\u003e 返回需要转换的类型，如果转换不成功时采用的默认值。\n\n### 强制转换为另一个类型（泛型）\n\u003e *public static T Convert\u003cT\u003e(this object value)* \u003cbr\u003e\n\u003e 返回需要转换的类型。\n\n### 强制转换为另一个类型（非泛型）\n\u003e *public static object Convert(this object value, Type type)* \u003cbr\u003e\n\u003e 返回需要转换的类型，DBNull识别为null,支持数组转换。\n\n### 调用示例：带默认值的用法\n\n```csharp\nint count = \"3\".Convert\u003cint\u003e(0);    //完整书写\nint count1 = \"3\".Convert(0);        //简写（推荐）\nint count2 = \"aa\".Convert(-1);\n\nConsole.WriteLine(count);\nConsole.WriteLine(count1);\nConsole.WriteLine(count2);\n\n/*\n3\n3\n-1\n*/\n```\n\n### 调用示例：常规转换\n\n```csharp\nstring text = (1024).Convert\u003cstring\u003e();\nstring value = DBNull.Value.Convert\u003cstring\u003e();\nint? age = \"32\".Convert\u003cint?\u003e();\nint? age1 = \"aaa\".Convert\u003cint?\u003e();\n\nConsole.WriteLine(date);\nConsole.WriteLine(text);\nConsole.WriteLine(value);\nConsole.WriteLine(age);\nConsole.WriteLine(age1);\n\n/*\n1024\nnull\n32\nnull\n*/\n```\n\n### 调用示例：Boolean（布尔类型）\n```csharp\nConsole.WriteLine(  \"true\".Convert\u003cbool\u003e()  );\nConsole.WriteLine(  \"ok\".Convert\u003cbool\u003e()  );\nConsole.WriteLine(  \"yes\".Convert\u003cbool\u003e()  );\nConsole.WriteLine(  \"good\".Convert\u003cbool\u003e()  );\nConsole.WriteLine(  \"t\".Convert\u003cbool\u003e()  );\nConsole.WriteLine(  \"True\".Convert\u003cbool\u003e()  );\nConsole.WriteLine(  \"TRUE\".Convert\u003cbool\u003e()  );\nConsole.WriteLine(  \"1\".Convert\u003cbool\u003e()  );\nConsole.WriteLine(  1.Convert\u003cbool\u003e()  );\nConsole.WriteLine(  \"-1\".Convert\u003cbool\u003e()  );\nConsole.WriteLine(  (-1).Convert\u003cbool\u003e()  );\n\nConsole.WriteLine(  \"----\"  );\n\nConsole.WriteLine(  \"false\".Convert\u003cbool\u003e()  );\nConsole.WriteLine(  \"no\".Convert\u003cbool\u003e()  );\nConsole.WriteLine(  \"f\".Convert\u003cbool\u003e()  );\nConsole.WriteLine(  \"bad\".Convert\u003cbool\u003e()  );\nConsole.WriteLine(  \"not\".Convert\u003cbool\u003e()  );\nConsole.WriteLine(  \"False\".Convert\u003cbool\u003e()  );\nConsole.WriteLine(  \"FALSE\".Convert\u003cbool\u003e()  );\nConsole.WriteLine(  \"0\".Convert\u003cbool\u003e()  );\nConsole.WriteLine(  0.Convert\u003cbool\u003e()  );\n\n/*\nTrue\nTrue\nTrue\nTrue\nTrue\nTrue\nTrue\nTrue\nTrue\nTrue\nTrue\n----\nFalse\nFalse\nFalse\nFalse\nFalse\nFalse\nFalse\nFalse\nFalse\n*/\n```\n\n### 调用示例：Encoding\n\n```csharp\nConsole.WriteLine(  \"utf-8\".Convert\u003cEncoding\u003e().WebName  );\nConsole.WriteLine(  Encoding.UTF8.Convert\u003cstring\u003e()  );\nConsole.WriteLine(  (65001).Convert\u003cEncoding\u003e().CodePage  );\nConsole.WriteLine(  (65001L).Convert\u003cEncoding\u003e().CodePage  );\nConsole.WriteLine(  Encoding.UTF8.Convert\u003cint\u003e()  );\nConsole.WriteLine(  Encoding.UTF8.Convert\u003clong\u003e()  );\nConsole.WriteLine(  \"xxxx\".Convert\u003cEncoding\u003e()  );\n\n/*\nutf-8\nutf-8\n65001\n65001\n65001\n65001\nnull\n*/\n```\n\n### 调用示例：Enum（枚举）\n```csharp\nConsole.WriteLine(  \"ReadOnly, System\".Convert\u003cFileAttributes\u003e() == (FileAttributes.ReadOnly | FileAttributes.System)  );\nConsole.WriteLine(  \"readOnly,system\".Convert\u003cFileAttributes\u003e() == (FileAttributes.ReadOnly | FileAttributes.System)  );\nConsole.WriteLine(  \"readOnly, System\".Convert\u003cFileAttributes\u003e() ==  FileAttributes.ReadOnly | FileAttributes.System );\nConsole.WriteLine(  (5).Convert\u003cFileAttributes\u003e() == (FileAttributes.ReadOnly | FileAttributes.System)  );\nConsole.WriteLine(  \"xxxx\".Convert\u003cFileAttributes?\u003e()  );\n\nConsole.WriteLine(  \"----\"  );\n\nConsole.WriteLine(  (FileAttributes.ReadOnly | FileAttributes.System).Convert\u003cstring\u003e() == \"ReadOnly, System\"  );\nConsole.WriteLine(  (FileAttributes.ReadOnly | FileAttributes.System).Convert\u003cint\u003e() == 5  );\nConsole.WriteLine(  (FileAttributes.ReadOnly | FileAttributes.System).Convert\u003clong\u003e() == 5L  );\n\n/*\nTrue\nTrue\nTrue\nTrue\nnull\n----\nTrue\nTrue\nTrue\n*/\n```\n\n###  调用示例：GUID\n```csharp\nGuid guid = new Guid(\"{B625052B-8D72-42CB-B71D-0AA5D116EB37}\");\n\nConsole.WriteLine(  \"B625052B-8D72-42CB-B71D-0AA5D116EB37\".Convert\u003cGuid\u003e() == guid  );\nConsole.WriteLine(  \"{B625052B-8D72-42CB-B71D-0AA5D116EB37}\".Convert\u003cGuid\u003e() == guid  );\nConsole.WriteLine(  guid.Convert\u003cstring\u003e()  );\n\n/*\nTrue\nTrue\nb625052b-8d72-42cb-b71d-0aa5d116eb37\n*/\n```\n\n###  调用示例：TimeSpan\n```csharp\nConsole.WriteLine(  \"01:02:03\".Convert\u003cTimeSpan\u003e() == new TimeSpan(01, 02, 03)  );\nConsole.WriteLine(  \"01:02:03.033\".Convert\u003cTimeSpan\u003e() == new TimeSpan(00, 01, 02, 03, 33)  );\nConsole.WriteLine(  \"5.01:02:03.033\".Convert\u003cTimeSpan\u003e() == new TimeSpan(05, 01, 02, 03, 33)  );\nConsole.WriteLine(  \"----\"  );\n\nConsole.WriteLine(  new TimeSpan(00, 01, 02, 03, 33).Convert\u003cstring\u003e()  );\nConsole.WriteLine(  new TimeSpan(00, 01, 02, 03).Convert\u003cstring\u003e()  );\nConsole.WriteLine(  new TimeSpan(05, 01, 02, 03, 33).Convert\u003cstring\u003e()  );\nConsole.WriteLine(  \"----\"  );\n\nConsole.WriteLine(  (1024).Convert\u003cTimeSpan\u003e() == new TimeSpan(1024)  );\nConsole.WriteLine(  (10240000L).Convert\u003cTimeSpan\u003e() == new TimeSpan(10240000L)  );\nConsole.WriteLine(  new TimeSpan(1024).Convert\u003cint\u003e() == 1024  );\nConsole.WriteLine(  new TimeSpan(10240000L).Convert\u003clong\u003e() == 10240000L  );\nConsole.WriteLine(  \"----\"  );\n\nConsole.WriteLine(  (10240000D).Convert\u003cTimeSpan\u003e() == TimeSpan.FromMilliseconds(10240000D)  );\nConsole.WriteLine(  (10240000F).Convert\u003cTimeSpan\u003e() == TimeSpan.FromMilliseconds(10240000F)  );\nConsole.WriteLine(  (10240000M).Convert\u003cTimeSpan\u003e() == TimeSpan.FromMilliseconds((double)10240000M)  );\nConsole.WriteLine(  TimeSpan.FromMilliseconds(10240000D).Convert\u003cdouble\u003e() == 10240000D  );\nConsole.WriteLine(  TimeSpan.FromMilliseconds(10240000F).Convert\u003cfloat\u003e() == 10240000F  );\nConsole.WriteLine(  TimeSpan.FromMilliseconds((double)10240000M).Convert\u003cdecimal\u003e() == 10240000M  );\nConsole.WriteLine(  \"----\"  );\n\nConsole.WriteLine(  \"test\".Convert\u003cTimeSpan?\u003e()  );\nConsole.WriteLine(  \"99999.99:99:99.999999999999\".Convert\u003cTimeSpan?\u003e()  );\nConsole.WriteLine(  \"----\"  );\n/*\nTrue\nTrue\nTrue\n----\n01:02:03.0330000\n01:02:03\n5.01:02:03.0330000\n----\nTrue\nTrue\nTrue\nTrue\n----\nTrue\nTrue\nTrue\nTrue\nTrue\nTrue\n----\nnull\nnull\n----\n*/\n```\n\n### 调用示例：DateTime\n```csharp\nConsole.WriteLine(  \"2007-12-20\".Convert\u003cDateTime\u003e() == new DateTime(2007, 12, 20)  );\n\nint totalDays = (int)(new DateTime(2017, 02, 03) - DateTime.MinValue).TotalDays;\nDateTime date = new DateTime(2017, 02, 03, 12, 30, 55, 99);\nTimeSpan time = new TimeSpan(totalDays, 12, 30, 55, 99);\n\nConsole.WriteLine(  date.Convert\u003cTimeSpan\u003e() == time  );\nConsole.WriteLine(  time.Convert\u003cDateTime\u003e() == date  );\n\n/*\nTrue\nTrue\nTrue\n*/\n```\n\n###  调用示例：Array\n```csharp\nstatic void PrintArray\u003cT\u003e(T[] array)\n{\n    for( int i =0; i \u003c array.Length; i++ )\n    {\n        Console.WriteLine($\"[{i}]{array[i]}\");\n    }\n    Console.WriteLine(\"------------\");\n}\nstatic void Main()\n{\n    string[] array_source = new string[]\n    {\n        \"1\",\"1.5\",\"3.2\",\"999\"\n    };\n    PrintArray(  array_source.Convert\u003cint?[]\u003e()  );\n    PrintArray(  array_source.Convert\u003cdecimal[]\u003e()  );\n    PrintArray(  new List\u003cstring\u003e(array_source).Convert\u003cint?[]\u003e()  );\n    PrintArray(  array_source.GetEnumerator().Convert\u003cdecimal[]\u003e()  );\n}\n\n/*\n[0]1\n[1]null\n[2]null\n[3]999\n------------\n[0]1\n[1]1.5\n[2]3.2\n[3]999\n------------\n[0]1\n[1]null\n[2]null\n[3]999\n------------\n[0]1\n[1]1.5\n[2]3.2\n[3]999\n------------\n*/\n```\n\n###  调用示例：Structure（结构体）\n```csharp\nbyte[] bytes = new byte[] { 5, 1, 0, 0 };\nint number = 261;\n\nint intValue = bytes.Convert\u003cint\u003e();           //将二进制转换为结构体\nConsole.WriteLine(  number == intValue  );\n\nbyte[] intToBytes = number.Convert\u003cbyte[]\u003e();  //将结构体转换为二进制数组\nbool eq = true;\nfor( int i =0; i \u003c intToBytes.Length; i++ )\n{\n    if ( intToBytes[i] != bytes[i] )\n    {\n        eq = false;\n        break;\n    }\n}\nConsole.WriteLine(  eq  );\n\n/*\nTrue\nTrue\n*/\n```\n\n###  调用示例：Implicit/Explicit（隐式/显式转换）\n```csharp\nclass CustomString \n{\n    public string? Value { get; set; }\n\n    public CustomString() {\n        Value = null;\n    }\n    public CustomString(string? value)\n    {\n        Value = value;\n    }\n\n    public override string? ToString()\n    {\n        return Value;\n    }\n    //显式转换：需要手动显式的转换，例如 int age = (int)32L; 显式将一个long转换为int。\n    public static explicit operator string?(CustomString customString)\n    {\n        return customString?.Value;\n    }\n    //隐式转换：在使用的时候无感，就如同 long value = 32 ;是隐式将int转换为了long\n    public static implicit operator CustomString(string? value)\n    {\n        return new CustomString(value);\n    }\n    //重写的目的只是为了方便测试：使两者相等。\n    public override bool Equals(object? obj)\n    {\n        if (obj == null)\n            return string.IsNullOrEmpty(Value);\n        if(obj is string)\n            return string.Equals(Value, (string)obj);\n        if(obj is CustomString customString)\n            return customString.Value == Value;\n        return base.Equals(obj);\n    }\n}\n\nstatic void Main()\n{\n    CustomString customString = new CustomString(\"test\");\n    string text = \"test\";\n\n    Console.WriteLine(  text.Convert\u003cCustomString\u003e() == customString  );  //触发：隐式转换\n    Console.WriteLine(  customString.Convert\u003cstring\u003e() == text  );        //触发：显式转换\n}\n/*\nTrue\nTrue\n*/\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsymbolspace%2FSymbol","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsymbolspace%2FSymbol","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsymbolspace%2FSymbol/lists"}