Skip to content

Commit 3a05c40

Browse files
Pi-Clalpil
authored andcommitted
Bump protobuf to 3.4
Personally I like what Protobuf 3 did with using more std types
1 parent 65804dd commit 3a05c40

File tree

8 files changed

+864
-1456
lines changed

8 files changed

+864
-1456
lines changed

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ regex = "1.3"
2727
# Byte collections
2828
bytes = "1"
2929
# Protobuf runtime
30-
protobuf = "2.3"
30+
protobuf = "3.4"
3131
# gzip (de)compression
3232
flate2 = "1.0"
3333
# RSA signature and SHA256 checksum verification
@@ -53,4 +53,4 @@ toml = "0.8"
5353

5454
[build-dependencies]
5555
# Protobuf code generation
56-
protobuf-codegen-pure = "2.16"
56+
protobuf-codegen = "3.4"

build.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
fn main() {
2-
// protobuf_codegen_pure::Codegen::new()
2+
// protobuf_codegen::Codegen::new()
33
// .out_dir("src/proto")
44
// .inputs(&[
55
// // "proto/names.proto",

src/lib.rs

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use bytes::buf::Buf;
1010
use flate2::read::GzDecoder;
1111
use http::{Method, StatusCode};
1212
use lazy_static::lazy_static;
13-
use protobuf::Message;
13+
use protobuf::{Message, MessageField};
1414
use regex::Regex;
1515
use ring::digest::{Context, SHA256};
1616
use serde::Deserialize;
@@ -248,16 +248,16 @@ pub fn get_repository_versions_response(
248248
verify_payload(signed, public_key).map_err(|_| ApiError::IncorrectPayloadSignature)?;
249249

250250
let versions = Versions::parse_from_bytes(&payload)?
251-
.take_packages()
251+
.packages
252252
.into_iter()
253253
.map(|mut n| {
254254
let parse_version = |v: &str| {
255255
let err = |_| ApiError::InvalidVersionFormat(v.to_string());
256256
Version::parse(v).map_err(err)
257257
};
258258
let versions = n
259-
.take_versions()
260-
.into_iter()
259+
.versions
260+
.iter()
261261
.map(|v| parse_version(v.as_str()))
262262
.collect::<Result<Vec<Version>, ApiError>>()?;
263263
Ok((n.take_name(), versions))
@@ -306,7 +306,8 @@ pub fn get_package_response(
306306

307307
let mut package = proto::package::Package::parse_from_bytes(&payload)?;
308308
let releases = package
309-
.take_releases()
309+
.releases
310+
.clone()
310311
.into_iter()
311312
.map(proto_to_release)
312313
.collect::<Result<Vec<_>, _>>()?;
@@ -482,7 +483,7 @@ pub enum ApiError {
482483
IncorrectPayloadSignature,
483484

484485
#[error(transparent)]
485-
InvalidProtobuf(#[from] protobuf::ProtobufError),
486+
InvalidProtobuf(#[from] protobuf::Error),
486487

487488
#[error("unexpected version format {0}")]
488489
InvalidVersionFormat(String),
@@ -549,16 +550,12 @@ fn read_and_check_body(reader: impl std::io::Read, checksum: &[u8]) -> Result<Ve
549550
}
550551

551552
fn proto_to_retirement_status(
552-
mut status: proto::package::RetirementStatus,
553+
status: MessageField<proto::package::RetirementStatus>,
553554
) -> Option<RetirementStatus> {
554-
if status.has_reason() {
555-
Some(RetirementStatus {
556-
message: status.take_message(),
557-
reason: proto_to_retirement_reason(status.get_reason()),
558-
})
559-
} else {
560-
None
561-
}
555+
status.into_option().map(|mut stat| RetirementStatus {
556+
message: stat.take_message(),
557+
reason: proto_to_retirement_reason(stat.reason()),
558+
})
562559
}
563560

564561
fn proto_to_retirement_reason(reason: proto::package::RetirementReason) -> RetirementReason {
@@ -597,16 +594,17 @@ fn proto_to_dep(mut dep: proto::package::Dependency) -> Result<(String, Dependen
597594

598595
fn proto_to_release(mut release: proto::package::Release) -> Result<Release<()>, ApiError> {
599596
let dependencies = release
600-
.take_dependencies()
597+
.dependencies
598+
.clone()
601599
.into_iter()
602600
.map(proto_to_dep)
603601
.collect::<Result<HashMap<_, _>, _>>()?;
604602
let version =
605-
Version::try_from(release.get_version()).expect("Failed to parse version format from Hex");
603+
Version::try_from(release.version()).expect("Failed to parse version format from Hex");
606604
Ok(Release {
607605
version,
608606
outer_checksum: release.take_outer_checksum(),
609-
retirement_status: proto_to_retirement_status(release.take_retired()),
607+
retirement_status: proto_to_retirement_status(release.retired),
610608
requirements: dependencies,
611609
meta: (),
612610
})
@@ -775,7 +773,7 @@ fn verify_payload(mut signed: Signed, pem_public_key: &[u8]) -> Result<Vec<u8>,
775773
&ring::signature::RSA_PKCS1_2048_8192_SHA512,
776774
&spki.subject_public_key,
777775
)
778-
.verify(payload.as_slice(), signed.get_signature());
776+
.verify(payload.as_slice(), signed.signature());
779777

780778
if verification.is_ok() {
781779
Ok(payload)
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
// pub mod names;
1+
// @generated
2+
23
pub mod package;
34
pub mod signed;
45
pub mod versions;

0 commit comments

Comments
 (0)