Add rust:1.34 runtime support to default deployments (#4461)

Co-authored-by: David Grove <dgrove-oss@users.noreply.github.com>
diff --git a/ansible/files/runtimes.json b/ansible/files/runtimes.json
index d699e14..6ad5e98 100644
--- a/ansible/files/runtimes.json
+++ b/ansible/files/runtimes.json
@@ -263,7 +263,24 @@
                     "attachmentType": "text/plain"
                 }
             }
+        ],
+        "rust": [
+            {
+                "kind": "rust:1.34",
+                "default": true,
+                "image": {
+                    "prefix": "openwhisk",
+                    "name": "action-rust-v1.34",
+                    "tag": "nightly"
+                },
+                "deprecated": false,
+                "attached": {
+                    "attachmentName": "codefile",
+                    "attachmentType": "text/plain"
+                }
+            }
         ]
+
     },
     "blackboxes": [
         {
diff --git a/core/controller/src/main/resources/apiv1swagger.json b/core/controller/src/main/resources/apiv1swagger.json
index 4474206..e735603 100644
--- a/core/controller/src/main/resources/apiv1swagger.json
+++ b/core/controller/src/main/resources/apiv1swagger.json
@@ -1914,7 +1914,9 @@
             "dotnet:3.1",
             "dotnet:default",
             "ballerina:0.990",
-            "ballerina:default"
+            "ballerina:default",
+            "rust:1.34",
+            "rust:default"
           ],
           "description": "the type of action"
         },
diff --git a/docs/actions-rust.md b/docs/actions-rust.md
new file mode 100644
index 0000000..1990385
--- /dev/null
+++ b/docs/actions-rust.md
@@ -0,0 +1,20 @@
+<!--
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+-->
+
+#TODO
diff --git a/docs/actions.md b/docs/actions.md
index d045139..fa59b8e 100644
--- a/docs/actions.md
+++ b/docs/actions.md
@@ -61,6 +61,7 @@
 * [PHP](actions-php.md)
 * [Python](actions-python.md)
 * [Ruby](actions-ruby.md)
+* [Rust](actions-rust.md)
 * [Swift](actions-swift.md)
 * [.NET Core](actions-dotnet.md)
 * [Docker and native binaries](actions-docker.md)
diff --git a/tests/dat/actions/unicode.tests/rust-1.34.txt b/tests/dat/actions/unicode.tests/rust-1.34.txt
new file mode 100644
index 0000000..f3bed8b
--- /dev/null
+++ b/tests/dat/actions/unicode.tests/rust-1.34.txt
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+extern crate serde_json;
+use serde_derive::{Deserialize, Serialize};
+use serde_json::{Error, Value};
+
+#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
+struct Input {
+       delimiter: String,
+}
+
+#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
+struct Output {
+       winter: String,
+}
+
+pub fn main(args: Value) -> Result<Value, Error> {
+    let input: Input = serde_json::from_value(args)?;
+    let msg = format!("{} {} {}", input.delimiter,'☃',input.delimiter);
+    println!("{}", msg);
+    let output = Output {
+        winter: msg,
+    };
+    serde_json::to_value(output)
+}