Index: utils/archive/options.dart |
diff --git a/utils/archive/options.dart b/utils/archive/options.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..102b9f5a8c2867ad29912606149acb096c24e0be |
--- /dev/null |
+++ b/utils/archive/options.dart |
@@ -0,0 +1,64 @@ |
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+#library('options'); |
+ |
+/** |
+ * An individual option. |
+ */ |
+class ArchiveOption { |
+ /** The name of the option. */ |
+ final String name; |
+ |
+ /** The value of the option. */ |
+ final value; |
+ |
+ /** The module to which the option applies.*/ |
+ String module; |
+ |
+ ArchiveOption(this.name, this.value, [this.module]); |
+} |
+ |
+/** |
+ * A collection of options. |
+ */ |
+class ArchiveOptions { |
+ /** The internal options map. */ |
+ final Map<String, ArchiveOption> _options; |
+ |
+ ArchiveOptions() : _options = <ArchiveOption>{}; |
+ |
+ /** Returns whether any options have been set. */ |
+ bool get isEmpty() => _options.isEmpty(); |
+ |
+ /** |
+ * Sets an option. [value] should either be a bool or something with a |
+ * reasonable `toString` method. |
+ * |
+ * To set the module for an option, use [operator[]]. |
+ */ |
+ void operator[]=(String name, value) { |
+ _options[name] = new ArchiveOption(name, value); |
+ } |
+ |
+ /** Gets the option with the given name. */ |
+ ArchiveOption operator[](String name) { |
+ return _options[name]; |
+ } |
+ |
+ /** |
+ * Serializes the options to the format understood by libarchive. |
+ * |
+ * Meant for internal use. |
+ */ |
+ String serialize() { |
+ return Strings.join(_options.getValues().map((option) { |
+ if (option.value is Boolean) { |
+ return '${option.value ? '!' : ''}${option.name}'; |
+ } else { |
+ return '${option.name}=${option.value}'; |
+ } |
+ }), ','); |
+ } |
+} |