summaryrefslogtreecommitdiffstats
path: root/src/DotNetOAuth/DictionaryXmlWriter.cs
blob: 0068f21eb5101043003424730a8794d22a74836a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
namespace DotNetOAuth {
	using System;
	using System.Collections.Generic;
	using System.Text;
	using System.Xml;

	/// <summary>
	/// An XmlWriter-looking object that actually saves data to a dictionary.
	/// </summary>
	class DictionaryXmlWriter {
		/// <summary>
		/// Creates an <see cref="XmlWriter"/> that actually writes to an <see cref="IDictionary<string, string>"/> instance.
		/// </summary>
		/// <param name="dictionary">The dictionary to save the written XML to.</param>
		/// <returns>The XmlWriter that will save data to the given dictionary.</returns>
		internal static XmlWriter Create(IDictionary<string, string> dictionary) {
			return new PseudoXmlWriter(dictionary);
		}

		/// <summary>
		/// Writes out a dictionary as if it were XML.
		/// </summary>
		class PseudoXmlWriter : XmlWriter {
			IDictionary<string, string> dictionary;
			string key;
			StringBuilder value = new StringBuilder();

			internal PseudoXmlWriter(IDictionary<string, string> dictionary) {
				this.dictionary = dictionary;
			}

			public override void WriteStartElement(string prefix, string localName, string ns) {
				key = localName;
				value.Length = 0;
			}

			public override void WriteString(string text) {
				if (!string.IsNullOrEmpty(key)) {
					value.Append(text);
				}
			}

			public override void WriteEndElement() {
				if (key != null) {
					dictionary[key] = value.ToString();
					key = null;
					value.Length = 0;
				}
			}

			public override WriteState WriteState {
				get { return WriteState.Element; }
			}

			public override void WriteStartAttribute(string prefix, string localName, string ns) {
				key = null;
			}

			public override void WriteEndAttribute() { }

			public override void Close() { }

			#region Unimplemented methods

			public override void Flush() {
				throw new NotImplementedException();
			}

			public override string LookupPrefix(string ns) {
				throw new NotImplementedException();
			}

			public override void WriteBase64(byte[] buffer, int index, int count) {
				throw new NotImplementedException();
			}

			public override void WriteCData(string text) {
				throw new NotImplementedException();
			}

			public override void WriteCharEntity(char ch) {
				throw new NotImplementedException();
			}

			public override void WriteChars(char[] buffer, int index, int count) {
				throw new NotImplementedException();
			}

			public override void WriteComment(string text) {
				throw new NotImplementedException();
			}

			public override void WriteDocType(string name, string pubid, string sysid, string subset) {
				throw new NotImplementedException();
			}

			public override void WriteEndDocument() {
				throw new NotImplementedException();
			}

			public override void WriteEntityRef(string name) {
				throw new NotImplementedException();
			}

			public override void WriteFullEndElement() {
				throw new NotImplementedException();
			}

			public override void WriteProcessingInstruction(string name, string text) {
				throw new NotImplementedException();
			}

			public override void WriteRaw(string data) {
				throw new NotImplementedException();
			}

			public override void WriteRaw(char[] buffer, int index, int count) {
				throw new NotImplementedException();
			}

			public override void WriteStartDocument(bool standalone) {
				throw new NotImplementedException();
			}

			public override void WriteStartDocument() {
				throw new NotImplementedException();
			}

			public override void WriteSurrogateCharEntity(char lowChar, char highChar) {
				throw new NotImplementedException();
			}

			public override void WriteWhitespace(string ws) {
				throw new NotImplementedException();
			}

			#endregion
		}
	}
}