worksap-ate/aws-sdk — pull request #176 by amutake (2014-02-12 11:05:43+00:00)
Title: aws-sdk-xml-unordered-0.3

aws-sdk-xml-unordered を 0.3 にバージョンアップしたので、それに合わせての変更です。
これで古いパーサは完全になくせました(と思います)。

前バージョンの問題として、トップレベルから2番目の深さにある要素しかストリームとして流すことができなかったのですが、ストリームとして流したい要素のパスを指示することで、任意の位置の要素をストリームとして読めるようにしました。

他にも関数名や引数の順番を入れ替えたりしました。

### パスの指定

パスの指定は `Data.Tree` を使っています。
例えば、
```xml

1234

1
test1

this is test

2
test2

1234

```
のような XML があって、`requestId`,`data`,`nextToken` をストリームとして読めるようにしたいとき、以下のようにするとパスを指定できます。
```haskell
"input" .=
[ end "requestId"
, "dataSet" .- end "data"
, end "nextToken"
]
```
これは、以下のような木になります。
```
input
|--- requestId
|--- dataSet
| `--- data
`--- nextToken
```

### Event の列から XmlElement への変換

`elementConduit` という関数があって、これは要素のパスを表す木を受け取って、`Conduit Event m XmlElement` を返す関数になっています。
また、 `elementConsumer` というのは `Consumer Event m XmlElement` です。

### XmlElement からデータへの変換

`element`, `elementM`, `elements` が `XmlElement` からデータへの変換関数になっています。

### XmlElement からデータへの変換関数から、Conduit 系への変換

`convert` という関数があって、これは `XmlElement -> m a` から、 `ConduitM XmlElement m a` への関数になっています。また、 `tryConvert` という関数があって、これは試しに変換しようとしてみて、ダメだったら `leftover` するという関数になっています。

### ec2QuerySource と ec2Query

ec2QuerySource は、要素のパスを指定する必要があることによって引数が一つ増えています。

また、ec2Query は型は変わりませんが、今までec2QuerySource に依存していたのをやめています。ec2QuerySource に依存していると、パスの指定があるせいでうまくいかないからです。

### まとめ

これで古いパーサは完全になくせました(と思います)。