force_sync/apply/
postgres.rs1use force::types::SalesforceId;
4
5use crate::{model::ChangeEnvelope, store::pg::SyncLink};
6
7#[must_use]
9pub fn project_sync_link(
10 existing: Option<&SyncLink>,
11 envelope: &ChangeEnvelope,
12 salesforce_id: Option<&SalesforceId>,
13 tombstone: bool,
14) -> SyncLink {
15 SyncLink {
16 tenant: envelope.sync_key().tenant().to_owned(),
17 object_name: envelope.sync_key().object_name().to_owned(),
18 external_id: envelope.sync_key().external_id().to_owned(),
19 salesforce_id: salesforce_id
20 .map(|id| id.as_str().to_owned())
21 .or_else(|| existing.and_then(|link| link.salesforce_id.clone())),
22 postgres_id: existing.and_then(|link| link.postgres_id.clone()),
23 last_source: Some(envelope.source().as_db_value().to_owned()),
24 last_source_cursor: envelope
25 .cursor()
26 .map(crate::model::SourceCursor::as_db_value),
27 last_payload_hash: Some(envelope.payload_hash().to_vec()),
28 tombstone,
29 }
30}