diff --git a/src/Cid.cs b/src/Cid.cs
index 77bc306..b6e6fe2 100644
--- a/src/Cid.cs
+++ b/src/Cid.cs
@@ -184,28 +184,78 @@ public MultiHash Hash
}
///
- /// A CID that is readable by a human.
+ /// Returns the string representation of the CID in the
+ /// general format.
///
///
- /// e.g. "base58btc cidv0 dag-pb sha2-256 Qm..."
+ /// e.g. "QmXg9Pp2ytZ14xgmQjYEiHjVjMFXzCVVEcRTWJBmLgR39V"
///
public override string ToString()
{
- var sb = new StringBuilder();
- sb.Append(Encoding);
- sb.Append(' ');
- sb.Append("cidv");
- sb.Append(Version);
- sb.Append(' ');
- sb.Append(ContentType);
- if (Hash != null)
- {
- sb.Append(' ');
- sb.Append(Hash.Algorithm.Name);
- sb.Append(' ');
- sb.Append(MultiBase.Encode(Hash.ToArray(), Encoding).Substring(1));
- }
- return sb.ToString();
+ return ToString("G");
+ }
+
+ ///
+ /// Returns a string representation of the CID
+ /// according to the provided format specifier.
+ ///
+ ///
+ /// A single format specifier that indicates how to format the value of the
+ /// CID. Can be "G" or "L".
+ ///
+ ///
+ /// The CID in the specified .
+ ///
+ ///
+ /// is not valid.
+ ///
+ ///
+ ///
+ /// The "G" format specifier is the same as calling .
+ ///
+ ///
+ ///
+ /// Specifier
+ /// return value
+ ///
+ /// -
+ /// G
+ /// QmXg9Pp2ytZ14xgmQjYEiHjVjMFXzCVVEcRTWJBmLgR39V
+ ///
+ /// -
+ /// L
+ /// base58btc cidv0 dag-pb sha2-256 Qm...
+ ///
+ ///
+ ///
+ public string ToString(string format)
+ {
+ switch (format)
+ {
+ case "G":
+ return Encode();
+
+ case "L":
+ var sb = new StringBuilder();
+ sb.Append(Encoding);
+ sb.Append(' ');
+ sb.Append("cidv");
+ sb.Append(Version);
+ sb.Append(' ');
+ sb.Append(ContentType);
+ if (Hash != null)
+ {
+ sb.Append(' ');
+ sb.Append(Hash.Algorithm.Name);
+ sb.Append(' ');
+ sb.Append(MultiBase.Encode(Hash.ToArray(), Encoding).Substring(1));
+ }
+ return sb.ToString();
+
+ default:
+ throw new FormatException($"Invalid CID format specifier '{format}'.");
+ }
+
}
///
diff --git a/test/CidTest.cs b/test/CidTest.cs
index 94ebceb..33feb0c 100644
--- a/test/CidTest.cs
+++ b/test/CidTest.cs
@@ -13,13 +13,40 @@ namespace Ipfs
public class CidTest
{
[TestMethod]
- public void HumanReadable()
+ public void ToString_Default()
{
var cid = new Cid { Hash = new MultiHash("QmXg9Pp2ytZ14xgmQjYEiHjVjMFXzCVVEcRTWJBmLgR39V") };
- Assert.AreEqual("base58btc cidv0 dag-pb sha2-256 QmXg9Pp2ytZ14xgmQjYEiHjVjMFXzCVVEcRTWJBmLgR39V", cid.ToString());
+ Assert.AreEqual("QmXg9Pp2ytZ14xgmQjYEiHjVjMFXzCVVEcRTWJBmLgR39V", cid.ToString());
cid = "zBunRGrmCGokA1oMESGGTfrtcMFsVA8aEtcNzM54akPWXF97uXCqTjF3GZ9v8YzxHrG66J8QhtPFWwZebRZ2zeUEELu67";
- Assert.AreEqual("base58btc cidv1 dag-pb sha2-512 8Vx9QNCcSt39anEamkkSaNw5rDHQ7yuadq7ihZed477qQNXxYr3HReMamd1Q2EnUeL4oNtVAmNw1frEhEN1aoqFuKD", cid.ToString());
+ Assert.AreEqual("zBunRGrmCGokA1oMESGGTfrtcMFsVA8aEtcNzM54akPWXF97uXCqTjF3GZ9v8YzxHrG66J8QhtPFWwZebRZ2zeUEELu67", cid.ToString());
+ }
+
+ [TestMethod]
+ public void ToString_L()
+ {
+ var cid = new Cid { Hash = new MultiHash("QmXg9Pp2ytZ14xgmQjYEiHjVjMFXzCVVEcRTWJBmLgR39V") };
+ Assert.AreEqual("base58btc cidv0 dag-pb sha2-256 QmXg9Pp2ytZ14xgmQjYEiHjVjMFXzCVVEcRTWJBmLgR39V", cid.ToString("L"));
+
+ cid = "zBunRGrmCGokA1oMESGGTfrtcMFsVA8aEtcNzM54akPWXF97uXCqTjF3GZ9v8YzxHrG66J8QhtPFWwZebRZ2zeUEELu67";
+ Assert.AreEqual("base58btc cidv1 dag-pb sha2-512 8Vx9QNCcSt39anEamkkSaNw5rDHQ7yuadq7ihZed477qQNXxYr3HReMamd1Q2EnUeL4oNtVAmNw1frEhEN1aoqFuKD", cid.ToString("L"));
+ }
+
+ [TestMethod]
+ public void ToString_G()
+ {
+ var cid = new Cid { Hash = new MultiHash("QmXg9Pp2ytZ14xgmQjYEiHjVjMFXzCVVEcRTWJBmLgR39V") };
+ Assert.AreEqual("QmXg9Pp2ytZ14xgmQjYEiHjVjMFXzCVVEcRTWJBmLgR39V", cid.ToString("G"));
+
+ cid = "zBunRGrmCGokA1oMESGGTfrtcMFsVA8aEtcNzM54akPWXF97uXCqTjF3GZ9v8YzxHrG66J8QhtPFWwZebRZ2zeUEELu67";
+ Assert.AreEqual("zBunRGrmCGokA1oMESGGTfrtcMFsVA8aEtcNzM54akPWXF97uXCqTjF3GZ9v8YzxHrG66J8QhtPFWwZebRZ2zeUEELu67", cid.ToString("G"));
+ }
+
+ [TestMethod]
+ public void ToString_InvalidFormat()
+ {
+ var cid = new Cid { Hash = new MultiHash("QmXg9Pp2ytZ14xgmQjYEiHjVjMFXzCVVEcRTWJBmLgR39V") };
+ ExceptionAssert.Throws(() => cid.ToString("?"));
}
[TestMethod]