Rust/WinRT即将到来
在过去五个月左右的时间里,团队一直在疯狂地研究Rust / WinRT,因此我团队在rust方面的努力仍在继续。我期待着尽快向社区开放。即使那样,这仍将是早期的日子,但仍有很多工作要做,我们基本上同意建立语言投影大约需要三年。自然地,这其中蕴含着十分大的价值。
仍然可以使用Rust / WinRT进行API调用,并且看到它们结合在一起非常令人满意。因此,我将带给您一些先睹为快的信息,以使您了解Rust中调用Windows API的外观。这是古老的Windows.Foundation.Uri
类:
use windows::foundation::*;
let uri = Uri::create_uri("https://kennykerr.ca")?;
assert!(uri.domain()? == "kennykerr.ca");
assert!(uri.port()? == 443);
assert!(uri.to_string()? == "https://kennykerr.ca/");
这是使用Windows.ApplicationModel.DataTransfer
命名空间将一些值复制到剪贴板的另一个示例:
use windows::application_model::data_transfer::*;
let content = DataPackage::new()?;
content.set_text("Rust/WinRT")?;
Clipboard::set_content(content)?;
Clipboard::flush()?;
这里我们调用了DataPackage的默认构造函数,但是Rust当然没有构造函数。因此,默认构造函数被常规的new方法替换。
最后,这是使用Windows.UI.Composition API
的示例:
use windows::foundation::numerics::*;
use windows::ui::composition::*;
use windows::ui::*;
let compositor = Compositor::new()?;
let visual = compositor.create_sprite_visual()?;
let red = Colors::red()?;
assert!(red == Color { a: 255, r: 255, g: 0, b: 0 });
let brush = compositor.create_color_brush_with_color(red)?;
visual.set_brush(brush)?;
visual.set_offset(Vector3 { x: 1.0, y: 2.0, z: 3.0, })?;
assert!(visual.offset()? == Vector3 { x: 1.0, y: 2.0, z: 3.0 });
在这里您可以看到我们正在创建一个合成器。我们使用合成器使用红色笔刷创建一个精灵视觉效果,然后设置视觉效果的偏移量。这看起来很简单,但这证明了Rust / WinRT的开发已经进行了大量工作,以使其看起来像Rust一样自然和原生。Composition API是Windows API中仅有的两种类型层次结构之一,需要特别注意才能正确使用任何语言,更不用说缺乏传统继承的语言了。
Rust / WinRT允许您使用直接从描述API的规范元数据中即时生成的代码调用,现在和将来的任何 Windows API,然后直接进入您的Rust包,在其中您可以像调用另一个一样调用它们的rust模块。
博客原文:https://kennykerr.ca/2020/02/22/rust-winrt-coming-soon/
Plotly for Rust
由Plotly JS支持的Rust绘图库。
Plotly的功能
绘制折现与散点图
extern crate plotly;
use plotly::charts::{Mode, Scatter};
use plotly::Plot;
fn line_and_scatter_plot() {
let trace1 = Scatter::new(vec![1, 2, 3, 4], vec![10, 15, 13, 17])
.name("trace1")
.mode(Mode::Markers);
let trace2 = Scatter::new(vec![2, 3, 4, 5], vec![16, 5, 11, 9])
.name("trace2")
.mode(Mode::Lines);
let trace3 = Scatter::new(vec![1, 2, 3, 4], vec![12, 9, 15, 12]).name("trace3");
let mut plot = Plot::new();
plot.add_trace(trace1);
plot.add_trace(trace2);
plot.add_trace(trace3);
plot.show();
}
fn main() -> std::io::Result<()> {
line_and_scatter_plot();
Ok(())
}
extern crate plotly;
use plotly::charts::{Line, LineShape, Legend, Font};
use plotly::charts::Layout;
use plotly::charts::{Mode, Scatter};
use plotly::Plot;
fn line_shape_options_for_interpolation() {
let trace1 = Scatter::new(vec![1, 2, 3, 4, 5], vec![1, 3, 2, 3, 1])
.mode(Mode::LinesMarkers)
.name("linear")
.line(Line::new().shape(LineShape::Linear));
let trace2 = Scatter::new(vec![1, 2, 3, 4, 5], vec![6, 8, 7, 8, 6])
.mode(Mode::LinesMarkers)
.name("spline")
.line(Line::new().shape(LineShape::Spline));
let trace3 = Scatter::new(vec![1, 2, 3, 4, 5], vec![11, 13, 12, 13, 11])
.mode(Mode::LinesMarkers)
.name("vhv")
.line(Line::new().shape(LineShape::Vhv));
let trace4 = Scatter::new(vec![1, 2, 3, 4, 5], vec![16, 18, 17, 18, 16])
.mode(Mode::LinesMarkers)
.name("hvh")
.line(Line::new().shape(LineShape::Hvh));
let trace5 = Scatter::new(vec![1, 2, 3, 4, 5], vec![21, 23, 22, 23, 21])
.mode(Mode::LinesMarkers)
.name("vh")
.line(Line::new().shape(LineShape::Vh));
let trace6 = Scatter::new(vec![1, 2, 3, 4, 5], vec![26, 28, 27, 28, 26])
.mode(Mode::LinesMarkers)
.name("hv")
.line(Line::new().shape(LineShape::Hv));
let mut plot = Plot::new();
let layout = Layout::new()
.legend(Legend::new().y(0.5).trace_order("reversed")
.font(Font::new().size(16)));
plot.add_layout(layout);
plot.add_trace(trace1);
plot.add_trace(trace2);
plot.add_trace(trace3);
plot.add_trace(trace4);
plot.add_trace(trace5);
plot.add_trace(trace6);
plot.show();
}
fn main() -> std::io::Result<()> {
line_shape_options_for_interpolation();
Ok(())
}
了解其更多用法与工程源码请访问GitHub仓库。
高度灵活的可用于管理和协调JWT工作流的库
特点
- 管理和协调JWT以进行用户登录、注销和续订
- 异步就绪
- 轻松启动
- 没有不安全的代码
- 在稳定的rust下运行
- 库方法(不需要运行时调用)
- 支持可插拔组件
- 更新新的刷新令牌后使旧的刷新无效
- 更新新的身份验证令牌后使旧的身份验证无效
- 在身份验证令牌到期时处理Thundering herd问题
目前工程需要添加更多示,并提高覆盖率。
前往GitHub仓库了解更多。
From 日报小组 @Lance
日报订阅地址:
独立日报订阅地址:
社区学习交流平台订阅:
评论区
写评论还没有评论