33
44namespace Soap \Encoding \Xml \Writer ;
55
6+ use Closure ;
67use Generator ;
7- use Soap \Encoding \Xml \Reader \ChildrenReader ;
88use Soap \Engine \Metadata \Model \MethodMeta ;
99use Soap \WsdlReader \Model \Definitions \BindingStyle ;
1010use Soap \WsdlReader \Model \Definitions \Namespaces ;
1111use XMLWriter ;
12- use function Psl \ Vec \ map ;
12+ use function VeeWee \ Xml \ Writer \ Builder \ children ;
1313use function VeeWee \Xml \Writer \Builder \namespaced_element ;
14- use function VeeWee \Xml \Writer \Builder \raw ;
1514
1615final class OperationBuilder
1716{
1817 /**
19- * @param list<non-empty-string > $parameters
18+ * @param list<Closure(XMLWriter): Generator<bool> > $parameters
2019 */
2120 public function __construct (
2221 private readonly MethodMeta $ meta ,
@@ -29,22 +28,6 @@ public function __construct(
2928 * @return Generator<bool>
3029 */
3130 public function __invoke (XMLWriter $ writer ): Generator
32- {
33- $ operationName = $ this ->meta ->operationName ()->unwrap ();
34- $ namespace = $ this ->meta ->inputNamespace ()->or ($ this ->meta ->targetNamespace ())->unwrap ();
35-
36- yield from namespaced_element (
37- $ namespace ,
38- $ this ->namespaces ->lookupNameFromNamespace ($ namespace )->unwrapOr ('tns ' ),
39- $ operationName ,
40- $ this ->buildChildren (...)
41- )($ writer );
42- }
43-
44- /**
45- * @return Generator<bool>
46- */
47- private function buildChildren (XMLWriter $ writer ): Generator
4831 {
4932 $ bindingStyle = BindingStyle::tryFrom ($ this ->meta ->bindingStyle ()->unwrapOr (BindingStyle::DOCUMENT ->value ));
5033
@@ -59,16 +42,22 @@ private function buildChildren(XMLWriter $writer): Generator
5942 */
6043 private function buildDocument (XMLWriter $ writer ): Generator
6144 {
62- $ documentParts = map ($ this ->parameters , (new ChildrenReader ())(...));
63-
64- yield from raw (implode ('' , $ documentParts ))($ writer );
45+ yield from children ($ this ->parameters )($ writer );
6546 }
6647
6748 /**
6849 * @return Generator<bool>
6950 */
7051 private function buildRpc (XMLWriter $ writer ): Generator
7152 {
72- yield from raw (implode ('' , $ this ->parameters ))($ writer );
53+ $ operationName = $ this ->meta ->operationName ()->unwrap ();
54+ $ namespace = $ this ->meta ->inputNamespace ()->or ($ this ->meta ->targetNamespace ())->unwrap ();
55+
56+ yield from namespaced_element (
57+ $ namespace ,
58+ $ this ->namespaces ->lookupNameFromNamespace ($ namespace )->unwrapOr ('tns ' ),
59+ $ operationName ,
60+ children ($ this ->parameters ),
61+ )($ writer );
7362 }
7463}
0 commit comments